Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Localization Revisted (aka. Translations Evolved) by Ruchi Varshney
PyCon 2014
April 13, 2014
Technology
0
560
Localization Revisted (aka. Translations Evolved) by Ruchi Varshney
PyCon 2014
April 13, 2014
Tweet
Share
More Decks by PyCon 2014
See All by PyCon 2014
Postgres Performance for Humans by Craig Kerstiens
pycon2014
29
3.3k
Technical Onboarding, Training, and Mentoring by Kate Heddleston and Nicole Zuckerman
pycon2014
1
2k
"My big gay adventure. Making, releasing and selling an indie game made in python." by Luke Miller
pycon2014
2
1.4k
Farewell and Welcome Home, Python in Two Genders by Naomi_Ceder
pycon2014
1
610
Deliver Your Software in an Envelope by Augie Fackler and Nathaniel Manista
pycon2014
1
460
Hitchhikers Guide to Free and Open Source Participation by Elena Williams
pycon2014
6
1.1k
Smart Dumpster by Bradley E. Angell
pycon2014
0
410
Software Engineering for Hackers: Bridging the Two Solitudes by Tavish Armstrong
pycon2014
0
650
Outreach Program for Women: Lessons in Collaboration by Marina Zhurakhinskaya
pycon2014
0
310
Other Decks in Technology
See All in Technology
Things you should know about PHP
opdavies
1
470
Kubernetes_EKSに入門してみる
toru_kubota
0
220
lt53
98_justdoit
0
110
証明書って何だっけ? 〜AWSの中間CA移行に備える〜
minorun365
3
1.9k
プログラミング支援AI GitHub Copilot すごいの話
moyashi
0
260
小さなお葬式をAWSに移行したお話
moriryouta
2
150
AKIBA.SaaS資料
yasumuusan
0
150
PCI DSS に準拠したシステム開発
yutadayo
0
180
スタメンのLeSSの導入と 事業部全体を巻き込んだ アウトカム文化への道のり
uuushiro
2
3k
データエンジニアを助けてくれるFivetranとSnowflakeの仕様&機能のご紹介
sagara
0
410
RDS/Aurora バージョンアップのポイント
hmatsu47
PRO
8
1.6k
Amazon Forecast を使って売上予測をしてみた
tomuro
0
290
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
87
12k
Principles of Awesome APIs and How to Build Them.
keavy
117
15k
Keith and Marios Guide to Fast Websites
keithpitt
407
21k
Product Roadmaps are Hard
iamctodd
38
7.7k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
120
29k
Code Reviewing Like a Champion
maltzj
508
38k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
152
13k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
224
50k
Atom: Resistance is Futile
akmur
256
24k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
351
21k
Designing on Purpose - Digital PM Summit 2013
jponch
108
5.9k
Build The Right Thing And Hit Your Dates
maggiecrowley
22
1.4k
Transcript
translations evolved ruchi varshney pycon 2014
about me @rvarshney on the web
None
most common tools are gettext and babel ! import gettext
as _ print _("Translate me.") ! from babel import dates, numbers dates.format_datetime(date, locale='de') numbers.format_decimal(1.234, locale='de') ! ! basics
! # Extraction config file (babel.cfg) [python: **.py] [jinja2: **.html]
[javascript: **.js] ! [extractors] python = babel.messages.extract:extract_python jinja2 = jinja2.ext:babel_extract javascript = babel.messages.extract:extract_javascript ! ! basics
# Run extraction $ pybabel extract --mapping-file babel.cfg --output out.po
<source_dir> ! ! ! ! ! basics
! # Translations for MYAPP. # Copyright (c) 2014 ORGANIZATION
! #: app/views.py:20 #, python-format msgid "Translate me." msgstr "" ! ! basics
basics _("hello!") msgid "hello!" bonjour! translation service message.mo extract compile
integrate
what could possibly go wrong?
latency
! def greeting(name, is_welcome): if is_welcome: return _("Hey there!") else:
return _("Bye Bye") ! ! ! strings before logic
! class Greetings(object): WELCOME_MESSAGE = _("Hey there!") BYE_MESSAGE = _("Bye!")
! ! def greeting(name, is_welcome): if is_welcome: return Greetings.WELCOME_MESSAGE else: return Greetings.BYE_MESSAGE strings before logic
! class Greetings(object): WELCOME_MESSAGE = _("Hey there!”) BYE_MESSAGE = _("Bye!")
BYE_MESSAGE = _("See you later!") ! ! ! ! ! lost in translation
! #, python-format msgid "Bye!" msgstr "Au revoir!" ! #,
python-format msgid "See you later!" msgstr "" ! lost in translation
lost in translation
hooks https://17727.web.pr.dev.hearsaylabs.com/
! class Greetings(object): WELCOME_MESSAGE = _("Hey there!”) BYE_MESSAGE = _("Bye!")
NEW_BYE_MESSAGE = _("See you later!") ! ! ! ! ! lost in translation
babel gotchas #: app/views.py:20 #, python-format #, fuzzy msgid "Translate
them." msgstr "Traduisez-moi"
babel gotchas “strings might be marked as fuzzy — if
you have fuzzy entries, make sure to check them by hand and remove the fuzzy flag before compiling.”
• —no-fuzzy-matching • other useful ones • —ignore-obsolete True •
—add-comments TRANSLATOR: • —keyword "_lazy" babel flags
• find the last translation date • run string extraction
• send po file for translation • wait… • get translations back • integrate with app • …. mundane dev
automation jenkins/travis translation upload translation download
dev intervention
content management
content management developer friendly apis translator friendly continuous, cross platform
• sample code • https://github.com/rvarshney/translations • how to i18n and
l10n (pycon 2013) • http://bit.ly/pyconi18n • https://www.youtube.com/watch?v=QUFPPJMjn6k resources
• python packages and tools • gettext, babel, potpie, polib
• githooks, webhooks, jenkins, travis • content management • smartling, transifex have known python support • django-rosetta (open source) resources
questions? @rvarshney we’re hiring!