Internationalization with the symfony framework
Upcoming SlideShare
Loading in...5
×
 

Internationalization with the symfony framework

on

  • 13,092 views

Internationalization is an important feature in a worldwide project. All-important projects required at some point to be used by people with different cultures and languages. This constraint must be ...

Internationalization is an important feature in a worldwide project. All-important projects required at some point to be used by people with different cultures and languages. This constraint must be understood from the application architecture to the implementation.

Symfony is bundled with many tools to create a full stack internationalized and localized application. However it can be hard to know how to handle all these tools: from the database layer (doctrine / propel) to the view, without missing the sfForm sub-framework.

The translation process can be very long as it involves the technical team to update and deploy the new translation files. Moreover it also requires some technical knowledge from the client to work with translation files. All these issues can be nicely resolved by using one plugin: mgI18nPlugin.

mgI18nPlugin is a n interactive GUI build on top of the symfony framework to translate messages used in the current pages. The plugin can also parse lib and action class to find translatable messages.

The session will demonstrate:
- All i18n features provided by the symfony framework
- Good practices
- Presentation of the mg18nPlugin which allows to edit project translations from within the website.

Statistics

Views

Total Views
13,092
Slideshare-icon Views on SlideShare
12,151
Embed Views
941

Actions

Likes
11
Downloads
222
Comments
0

21 Embeds 941

http://rabaix.net 339
http://symfony.com 142
http://swik.net 126
http://www.slideshare.net 123
http://www.symfony-project.org 69
http://www.developpez.net 54
http://www.phphatesme.com 27
http://www.sfexception.com 18
http://thomas.rabaix.net 11
http://localhost 6
http://www.symfolive.com 4
http://www.brijj.com 4
http://theoldreader.com 3
http://newsblur.com 3
http://webcache.googleusercontent.com 2
http://static.slidesharecdn.com 2
http://pt.minichiello.name 2
http://translate.googleusercontent.com 2
http://feeds.feedburner.com 2
http://coderwall.com 1
https://twitter.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Internationalization with the symfony framework Internationalization with the symfony framework Presentation Transcript

    • Internationalization Thomas Rabaix – Soleoweb SARL Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • Thomas Rabaix •  freelance •  symfony fan –  Conference #sflive09 –  Book : more with symfony –  Plugins •  swFunctionalTestGenerationPlugin : generate ready-to-be-customized test skeletons in a matter of minutes •  swCrossLinkApplicationPlugin : add cross application link in your project •  sfSolrPlugin : integrates Solr into symfony framework. •  Many more Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • What is internationalization and localization ? •  Internationalization •  Localization Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • Culture ? •  Culture is the addition of –  Language + Region •  fr : french •  fr_FR : french from France •  fr_BE : french from Belgium •  en_UK : english from United-Kingdom •  en_US : english from United-States Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • What elements can be i18n and l10n ? •  Internationalization –  url : routing –  Model : doctrine + propel –  form : sfForm framework •  Localization –  number –  currency –  date / time Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • Internationalization •  most of the i18n code is based on the Prado framework •  ICU data has been updated on sf1.3 and sf1.4 •  edit your settings.yml and enable i18n options Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • Culture detection Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • Update culture •  sfContext::getInstance()->getUser()->setCulture(‘fr’) •  Notify the user.change_culture (does not change user’s culture) Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • Culture in URL •  This is a feature built in the sfRouting class and symfony uses the value to update the user current culture. •  example : /en/recipes/search => sf_culture = en Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • Creating i18n url •  example –  /recettes/recherche –  /recipes/search •  This is not a built in feature, however plugins or code can help you to create translated url. Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • Solution 1 : ysfDimensionPlugin •  You can create custom configuration files per dimension, –  a culture dimension with 'fr' or 'en' •  then you just have to create : –  SF_APP_FOLDER/config/en/routing.yml –  SF_APP_FOLDER/config/fr/routing.yml •  con: duplicate routes configurations on each routing.yml files and can be tricky to setup •  pro : no performances overhead Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • Solution 2 : custom code •  Create a custom sfRouting class •  Usage Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • Model definition •  Propel and Doctrine both have built in feature to handle translation version Doctrine Propel Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • Model and culture •  The default model culture value can be accessed through : –  sfDoctrineRecord::getDefaultCulture() –  sfPropel::getDefaultCulture() •  The default model culture value can be updated through : –  sfDoctrineRecord::setDefaultCulture() –  sfPropel::setDefaultCulture() Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • Model i18n properties •  Accessing i18n property : –  always uses the default culture •  Doctrine •  Propel Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • Model : query •  ORM never automatically left join the translation table •  Doctrine •  Propel Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • Helpers – localization •  NumberHelper: –  format_currency –  format_number Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • Helpers - DateHelper •  format_date helper and format_datetime helper –  Output format (culture = en) the  format_date  and   date.me  helpers   automa.cally  localize   and  translate  date   using  ICU  data   Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • Helpers – DateHelper •  format_daterange helper •  distance_of_time_in_words helper Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • Helpers – I18n •  __() helper •  format_number_choice helper Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • Behind helpers •  Helpers are just shortcut functions to internal class –  sfNumberFormat and sfDateFormat –  sfI18n •  You can use these classes in your actions or custom lib –  Check out the symfony API Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • sfForm – i18n friendly widgets •  the sfForm framework provides with many i18n widget : –  sfWidgetFormI18nChoiceCountry –  sfWidgetFormI18nChoiceCurrency –  sfWidgetFormI18nChoiceLanguage –  sfWidgetFormI18nChoiceTimezone –  sfWidgetFormI18nDate –  sfWidgetFormI18nDateTime –  sfWidgetFormI18nTime •  And the related validator : zh   –  sfValidatorI18nChoiceTimezone –  sfValidatorI18nChoiceLanguage –  sfValidatorI18nChoiceCountry All  these  widgets  accept  a   culture  op.on   en   Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • sfForm - swCultureDemoForm Culture  is  set  in   the  controller   DO  NOT  USE   sfContext::getInstance()   Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • sfForm – elements translation •  The sfForm has a translation callback function through the sfWidgetFormSchemaFormatter class •  Label, error message, help messages are translated by using the callable method •  warning : with sf1.3 and sf1.4 "choice" widgets which extends the sfWidgetFormChoiceBase class automatically translates choices provided when the widget is rendered. Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • sfForm + ORM •  symfony provides an unified API between both ORM to handle i18n model. •  If you need to build a form to edit translation from a model, you can use the `embedI18n` method –  method declared in the sfFromDoctrine and sfFormPropel Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • sfForm – backend form •  Create a custom BaseForm[Doctrine|Propel] class in the backend/lib/form folder. Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • Translation management … •  Sources available –  Gettext –  MySQL –  SQLite –  XLIFF •  Not really user friendly Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • … an alternative •  mgI18nPlugin : interactive GUI to translate webpage •  Open sourced by menugourmet.com : online quality recipes Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • Menugourmet.com Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • example Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • mgI18nPlugin - parameters •  The plugin detects parameters in your translated message Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • mgI18nPlugin •  Display a popup to translate all messages used in the current page •  Parse lib and actions to find message (handle catalogue) •  All messages are stored in database Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • mgI18nPlugin - tips •  Cache is a key/value, so do not use a full text message. –  Smaller is your cache, quicker it will be loaded –  Use catalogue •  Code message : –  The awesome recipes list => title_recipes •  Always use a prefix : –  btn : btn_submit –  label : label_name –  link : link_to_homepage Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • mgI18nPlugin – configuration •  read the famous README file •  Tweak security Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • mgI18nPlugin – tools •  Import xliff into the database •  unreachable messages Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • mgI18nPlugin – ROADMAP •  Complete export database to xliff files •  Remove Doctrine dependency, full PDO support •  Simplify GUI Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com  
    • QUESTIONS  ?   Thomas  Rabaix   hGp://www.soleoweb.com   Images  references        -­‐  hGp://www.flickr.com/photos/photonoob/2164014945/        -­‐  hGp://www.flickr.com/photos/vermininc/2389710332/      -­‐  hGp://www.flickr.com/photos/16175430@N02/3490488907/      -­‐  hGp://www.flickr.com/photos/urville_djasim/2643449676/   Internationalization|  Thomas  Rabaix  –  h-p://www.soleoweb.com