How to localize a program in Scol » History » Version 2
iri, 09/25/2012 01:08 AM
| 1 | 1 | iri | h1. How to localize a program in Scol ? |
|---|---|---|---|
| 2 | |||
| 3 | Allow the translation of your application is often a good thing. Several ways exist, we will see one. |
||
| 4 | |||
| 5 | For an given application, we have a subdirectory with all language files : |
||
| 6 | myapp.english.lang |
||
| 7 | myapp.spanish.lang |
||
| 8 | myapp.italian.lang |
||
| 9 | myapp.french.lang |
||
| 10 | ... |
||
| 11 | |||
| 12 | In a file language, we put a reference and its translation for each line : |
||
| 13 | <pre> |
||
| 14 | REFERENCE_1 word_translated |
||
| 15 | REFERENCE_2 string translated |
||
| 16 | REFERENCE_3 substring_1 ## substring_2 ## substring_3 |
||
| 17 | ... |
||
| 18 | </pre> |
||
| 19 | |||
| 20 | Each ## will be replaced by a provided parameter, if needed |
||
| 21 | |||
| 22 | 2 | iri | Next, go to *locked/lib* directory et open *loc.pkg* in your favorite text editor. |
| 23 | 1 | iri | |
| 24 | - *startloc* is the function to load the language file for a given user. |
||
| 25 | - *loc* is the function for a simple translation. |
||
| 26 | - *strloc* loc are the functions for a translation with parameters |
||
| 27 | |||
| 28 | h2. Example : |
||
| 29 | |||
| 30 | h3. The package |
||
| 31 | |||
| 32 | First, we create our application "mylocapp". The file is named "mylocapp.pkg" in the "tutorials" directory : |
||
| 33 | |||
| 34 | <pre> |
||
| 35 | fun main ()= |
||
| 36 | _showconsole; |
||
| 37 | |||
| 38 | /* |
||
| 39 | load the language file to the given user |
||
| 40 | |||
| 41 | 2 | iri | startloc defines automatically the user language. |
| 42 | If no translation exist, english version will be used. |
||
| 43 | 1 | iri | */ |
| 44 | startloc "tutorials/lang/mylocapp"; |
||
| 45 | |||
| 46 | /* |
||
| 47 | loc returns the content from a key, without parameter |
||
| 48 | 2 | iri | strloc loc returns the content from a key with parameters. |
| 49 | Parameters are in a list, '##' will be replaced by them, in the same order |
||
| 50 | 1 | iri | */ |
| 51 | _fooS loc "WELCOME"; |
||
| 52 | _fooS strloc loc "HELLO" (_getress "DefaultName") :: nil; |
||
| 53 | let localtime time -> [_ mn h _ _ _ _ _] in |
||
| 54 | _fooS strloc loc "DATE" (itoa h) :: (itoa mn) :: nil; |
||
| 55 | _fooS loc "BYE"; |
||
| 56 | |||
| 57 | 0;; |
||
| 58 | </pre> |
||
| 59 | |||
| 60 | Next, we create our files languages. For example, in english and in french |
||
| 61 | |||
| 62 | h3. In english |
||
| 63 | |||
| 64 | The file is "mylocapp.english.lang", in "tutorials/lang/". Each '##' will be replaced by the provided parameters in the source code. |
||
| 65 | |||
| 66 | <pre> |
||
| 67 | BYE Good bye ! |
||
| 68 | DATE It is ## hours and ## minutes |
||
| 69 | HELLO Hi ## ! |
||
| 70 | WELCOME Welcome on my application |
||
| 71 | </pre> |
||
| 72 | |||
| 73 | h3. In french |
||
| 74 | |||
| 75 | The file is "mylocapp.french.lang", in "tutorials/lang/". |
||
| 76 | |||
| 77 | <pre> |
||
| 78 | BYE Au-revoir ! |
||
| 79 | DATE Il est ## heures and ## minutes |
||
| 80 | HELLO Salut ## ! |
||
| 81 | WELCOME Bienvenu sur mon application |
||
| 82 | </pre> |
||
| 83 | |||
| 84 | h3. The script |
||
| 85 | |||
| 86 | Finally, we write the launcher : |
||
| 87 | <pre> |
||
| 88 | |||
| 89 | _load "locked/lib/loc.pkg" |
||
| 90 | _load "tutorials/mylocapp.pkg" |
||
| 91 | main |
||
| 92 | </pre> |
||
| 93 | |||
| 94 | Note that add the loc.pkg at first ! |
||
| 95 | Save all and launch the .scol. |
||
| 96 | |||
| 97 | This application is readable from the "repository":http://redmine.scolring.org/projects/tutorials/repository/show/localization |
||
| 98 | |||
| 99 | |||
| 100 | License : "CC-BY-SA-2.0":https://creativecommons.org/licenses/by-sa/2.0/ |
||
| 101 | Tutorial by iri |
||
| 102 | Updated by / |