Project

General

Profile

I18nTaxeditor » History » Revision 9

Revision 8 (Patrick Plitzner, 02/23/2017 05:35 PM) → Revision 9/10 (Patrick Plitzner, 08/09/2017 02:51 PM)

 
 # Internationalization / Localization 

 This site describes the conventions for i18n and L10n of our projects. 


 ## Taxonomic Editor 


 ### Project structure 

 Each plugin has the following structure: 

 ~~~ 

 <plugin_root> 
  |-src/main/java 
  | \-eu.etaxonomy.taxeditor.xyz 
  |    \-l10n 
  |     \-Messages.java 
  |      |-messages_xx.properties 
  |      |-messages_yy.properties 
  |      \-messages.properties 
  \-OSGI-INF 
    \-l10n 
     |-bundle_xx.properties 
     |-bundle_yy.properties 
     \-bundle.properties 
    
 ~~~ 

 * xx, yy, etc. stand for the single country codes 
 * the .properties files without country code are the default files used if no locale is specified 
 * bundle.properties are for externalized string from the plugin.xml (mostly labels for menus, toolbar, context-menus) 
 * messages.properties are for Java classes (mostly exception texts and user interaction, dialogs, etc.) 
 * Messages.java is used to access the externalized strings in Java classes. It "connects" the messages.properties files to the Java code 
 * **Note:** When externalizing Java classes with Eclipse (right-click->Source->Externalize Strings) you have to **adapt adapt the path** path to Messages.java and the properties file or Eclipse will create a new Messages.java and messages.properties file in the current package 

 ### Conventions 
 * For sustainable future updates it is always recommended to keep the language specific .properties files in sync with the default one 
  * Try to do the translation directly if you know the language 
  * If you don't know the language at least copy the newly created key-value pairs into the language specific .properties file 
 * For comparison it is much easier if the .properties files all have the same order of key-value pairs 
 * Do not include technical strings into the externalization process like e.g. "; " or exception messages like "IEditorInput received a null selection" 
  * even if this is displayed to the user, translating it would probably make it worse 
  * if it is shown via the MessagingUtils the user can just copy the message and send it to us 
 * Use some meaningful suffixes for the externalized string 
  * Eclipse automatically starts every variable with the class name and then just appends numbers (`CdmDataSourceViewPart_2`) 
  * if the string would be "Confirm deletion" call it <class_name>_CONFIRM_DELETE or something similar. This improves the readability of the code a lot. 
 * Before starting the automatic externalization look for: 
  * repeated strings and try to refactor them to constants in that class 
  * unify string that are split to several string because of line breaks 
  * use `String.format()` if the string contains variables