GET /api/v2/video/1379
HTTP 200 OK Vary: Accept Content-Type: text/html; charset=utf-8 Allow: GET, PUT, PATCH, HEAD, OPTIONS
{ "category": "DjangoCon 2012", "language": "English", "slug": "a-gringos-guide-to-internationalization", "speakers": [ "Jacob Burch" ], "tags": [ "django", "internationalization" ], "id": 1379, "state": 1, "title": "A Gringo's Guide to Internationalization", "summary": "Coming from a speaker who escaped a notion to \"why would we need to\ntranslate?\" this talk aims to show what actually goes into translating a\nwebsite or app using Django's Internationalization tools. Covered will be an\noverview of batteries included, best practices and anti-patterns in using\nthem, and some third party tools to help make your life escaping the myth of a\nLingua Franca easier.\n\n", "description": "There's often a bubble in the English-speaking programming world that the\nentire internet runs on English. Our Top-level domains are shortened english\nwords. Our programming languages--Python in particular--try to emulate English\nwords and grammar.\n\nFirmly in place in this world for many years, my first attempt to translate a\npre-existing site came with a high sticker shock of nuanced difficulty. This\ntalk covers all the lessons I learned in taking a fully-fleshed web app with\nno translation (and a programmer with no translation experience) to being\ncompletely translated.\n\n# Talk Overview\n\n 1. Introduction to Translation\n 1. Overview of gettext\n 2. Brief history of a translation\n 1. Add gettext calls\n 2. `django-admin.py makemessages`\n 3. Ship po file to translation service\n 4. Receive file back\n 5. Compile\n 6. Fin\n 3. gettext vs gettext_lazy\n 2. Batteries Included\n 1. gettext Python calls\n 2. Middleware\n 3. template tags\n 1. trans vs. blocktrans\n 4. Anti-patterns of the battery included use.\n 1. Heavy whitespace in blocktrans\n 2. Monster-sized translations\n 3. The best laid plans of mice and men...\n 1. Problems that get in the way of A history of a translation.\n 1. Realize half the site is still untranslated\n 2. Edit out the translations you already had translated to avoid re-curring costs\n 3. Have the product adjust so two words change\n 4. Realize common text that's in the database\n 5. Fin?\n 2. Patterns and tools to help\n 1. `poxx.py` and the idea of a 'canonical' po file.\n 2. `dbgettext`\n 3. Wholly-translated template files (translate_include, trans_render)\n 4. Advanced Translation Technique\n 1. While undocumented, translation backend is pretty darn flexible and the source code is a treasure trove to make 'impossible' use cases not too bad.\n 2. Overview of how the translation service works behind the scenes\n 1. `_translation` thread local\n 2. Merged translations (root->app->default)\n 3. Sessions vs. Accept-Language\n 4. Middleware and Context processors\n 3. Example of advanced translation code: Multi-tenancy translation.\n 1. Translating some sites, not translating others\n 2. Translating Site A one way, Site B another\n 3. Using an English translation for duct-tape and profit.\n 5. Why Django's i18n sucks.\n 1. In the vein of the \"Django Sucks\" Key note. It doesn't really, but it could use some changes--from minor to major.\n 2. Why .po Files are archaic and limited.\n 3. What we can do to improve for 1.5 and beyond.\n\n", "quality_notes": "", "copyright_text": "Creative Commons Attribution license (reuse allowed", "embed": "<object width=\"640\" height=\"390\"><param name=\"movie\" value=\"http://youtube.com/v/j2ZHZWfx60Y?version=3&amp;hl=en_US\"></param><param name=\"allowFullScreen\" value=\"true\"></param><param name=\"allowscriptaccess\" value=\"always\"></param><embed src=\"http://youtube.com/v/j2ZHZWfx60Y?version=3&amp;hl=en_US\" type=\"application/x-shockwave-flash\" width=\"640\" height=\"390\" allowscriptaccess=\"always\" allowfullscreen=\"true\"></embed></object>", "thumbnail_url": "http://i.ytimg.com/vi/j2ZHZWfx60Y/hqdefault.jpg", "duration": null, "video_ogv_length": null, "video_ogv_url": null, "video_ogv_download_only": false, "video_mp4_length": null, "video_mp4_url": null, "video_mp4_download_only": false, "video_webm_length": null, "video_webm_url": null, "video_webm_download_only": false, "video_flv_length": null, "video_flv_url": null, "video_flv_download_only": false, "source_url": "http://www.youtube.com/watch?v=j2ZHZWfx60Y", "whiteboard": "", "recorded": "2012-09-04", "added": "2012-10-08T17:39:46", "updated": "2014-04-08T20:28:26.997" }