Translators, I excerpt some things I recently wrote to the development
list.  I want to make other developers aware of the right and wrong ways to
code strings that must be translated.

Do you think these are good recommendations?  Would you add any?

Here are some rules I recommend:

   - Some languages prefer other punctuation conventions, such as «these»
   quotes, or such as leaving a space left of a colon  -- therefore, use _()
   even for a format like _("%s: %s") that contains only % slots and
   punctuation.


   - Some languages vary words contextually, for gender agreement or case,
   though this happens very little in English -- therefore, avoid putting
   small isolated words into _() which you then substitute into a longer
   string.  Instead, make longer phrases in _() containing words to be
   translated in context.  Do this even at the cost of repetitious code that
   defines more strings, varying only the short word inside a longer phrase


   - Some languages prefer different word order, such a Japanese with verbs
   last and postpositions rather than prepositions. -- Therefore, avoid
   composition of user-visible strings using contatentation (+ operator) of
   many single words and short phrases.  Use format substitutions instead to
   put words in place.  Concatenate long phrases and clauses only.

For example:

AudacityMessageBox(_("Could not open file: ") + fileName); // wrong
AudacityMessageBox( wxString::Format( _("Could not open file: %s"),
fileName )); // right

   - Some languages have more than two number forms of nouns (singular and
   plural); most of the Slavics have complicated case-agreement rules for
   various numerals, and Arabic has a dual.  -- Therefore use the wxPLURAL
   macro, which cooperates with the message catalog system, so that a language
   can provide more than two translations as appropriate, and the run-time
   lookup chooses the right one according to a number. For example

  // wrong:
   auto format = iHours == 1 ? _("%d hour") : _("%d hours");
   auto sHours = wxString::Format( format, iHours );

  // right:
   auto sHours =
      wxString::Format( wxPLURAL("%d hour", "%d hours", iHours), iHours );

   - In general, substitute only names and numbers into translated formats,
   not results of other translations, though there remain some difficult cases
   where that rule must be relaxed.


PRL
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Audacity-translation mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/audacity-translation

Reply via email to