+1

On Friday, 13 July 2012 07:19:21 UTC-5, dbdeveloper wrote:
>
> web2py 2.0: New in National Languages Support SubsystemUse default.py (new 
> future, now in trunk):
>
> New in National Languages Support Subsystem: 1. Improved Algorithm For 
> Selecting Appropriate Translation Language From Existing In "languages/" 
> Directory Previously it was necessary to exactly indicate the expected 
> language codes in filenames from "languages/*" because different Internet 
> browsers mark, for example, the Russian language in several ways, as "ru", 
> "ru-ru" or "ru-by", etc. So it was necessary to keep all files ("ru.py", "
> ru-ru.py" and "ru-by.py") with the same content in the "languages/" 
> directory. Especially for this case the list of languages (and not a 
> particular language) was invented to use in T.current_languages ​​() and 
> T.force(). Previously it was necessary to make records the following way:
> T.set_current_languages​​ 
> ('en','en-au','en-bz','en-ca','en-cb','en-gb','en-ie','en-jm','en-nz','en-ph','en-tt','en-us','en-za','en-zw')
> :)))
>
> What has changed? The way of language selection in T.force() has changed. 
> Now the language selection algorithm is the following:
>
> Let given language be: "aa-bb"
>
> Language file search way is: "aa-bb.py" -> "aa.py" -> "aa*.py"
>
> So now all the languages ​​such as "aa*" will match a file with filename: 
> aa.py
>
> This allows us to define default language in each language group (e.g. "
> en*", "ru*", "uk*", "fr*", ...).
>
> For example, having "pt-pt.py" and "pt-br.py" translation files, we can 
> make one of them default in the "pt" language group and save it as "pt.py". 
> Let it be "pt-pt.py" file. Then all "pt*" language codes (except "pt-br", 
> which we have specified) will switch to "pt-pt" in the file "pt.py"
>
> The last step is especially interesting -> aa*.py
>
> This selection allows you to select the first *"parallel"* language, if 
> there is no default language in a group.
>
> For example, if we leave both language files pt-pt.py and pt-br.py, 
> without creating a pt.py file, the first language that comes in the list 
> (most likely in alphabetical order) will be selected when you specify the 
> language code as 'pt' (it may be necessary when using "languages 
> ​​/default.py" file, see below).
>
> However here comes the question - what specific language is default in the 
> 'pt' group: 'pt-pt' or 'pt-br'? Now we cannot learn it from the file 
> name. Here we come to the following improvements:
> 2. Pseudo-keys: '!langcode!'' And '!langname!' Two pseudo-keys are added 
> to language files:
>
>    - !langcode! - specifies the real language code (by default it is the 
>    same as the language code from filename)
>    - !langname! - specifies the language name *in national subscription*. 
>    It is used to select language by a customer. Why is the language name 
>    written in national subscription? That is because a customer cannot know 
>    English, right? She will select the world which she can read. By default 
>    this string is the same as the !langcode!
>
> So in uk.py (*Ukrainian*) language file we can write:
> {
> '!langcode!': 'uk-ua',
> '!langname!': 'Українська',
> ...
> }
>
> Why do these pseudo-keys start with '!'? - That is because ASCII-code of 
> '!' is less than codes of all other printable characters (except SPACE). 
> And dictionary is saved in alphabetical order (see write_dict() in 
> gluon/languages.py). So these keys will be in the first positions in 
> language files.
>
> A new function T.get_possible_languages_info(lang=None) which gets 
> information from these pseudo-keys is added to translator class. This 
> function returns information (tuple(langcode, langname, lang_mtime)) 
> about the specified language or dictionary with all possible languages from 
> APP/languages directory. The language code from filename is the key in 
> this directory.
>
>
>    - language code from filename is stored in T.accepted_language (uk.py==> 
>    T.accepted_language == 'uk')
>    - language code from !langcode! pseudo-keys can be accessed using 
>    T('!langcode!') or 
>    T.get_possible_languages_info(T.accepted_language)[0]
>    - language name in national subscription can be accessed using 
>    T('!langname!') or 
>    T.get_possible_languages_info(T.accepted_language)[1]
>
> *3*. Language File "languages/default.py" From now on, any language can 
> be declared as system default! It is necessary for monolingual/bilingual 
> websites in languages ​​other than English. First, let give the definition: 
> what is the system-default-language? It is a language in which messages are 
> written in source files using T() (see below) functions: e.g. T("message 
> in default-language").
>
> In Web2py Core all messages are written in English. But the user 
> application can use a different language in T() function call. To use the 
> user language as the default language it is necessary to translate all 
> web2py core messages into this language. The languages/default.py is used 
> for this purpose. How it works:
>
>          *MESSAGES IN T("")              MESSAGES IN DEFAULT LANGUAGE     
> MESSAGES IN AA LANGUAGE*
>
> CORE     T("English Msg")   =>default.py=> "User lang msg"
> CORE     T("English Msg")   =>AA.py ====================================> 
> "AA language message"
>
> USERAPP  T("User lang msg") =============> "User lang msg"
> USERAPP  T("User lang msg") =>default.py=> "Changed User lang msg" (change 
> msg w/o changing sources)
> USERAPP  T("User lang msg") =>AA.py ====================================> 
> "AA language message"
>
> *Additional Benefits:* default.py is also convenient for english users. 
> They can change any message (english => english) or date format without 
> sources correction, simply stating "translation" in default.py
>
> To make your language the default language it is enough to rename the 
> language file to default.py:
> # cd welcome/languages
> # mv uk.py default.py
> and make sure that pseudo-keys '!langcode!' and '!langname!' are 
> correctly filled. E.g.:
> $cat default.py
> {
> '!langcode!': 'en-us',
> '!langname!': 'English (US)',
> 'Here I will put the awesome title': 'My Title',  # <<< now you can 
> change "default" messages with your ones
> ...
> }
> Using default.py we don't get default language in 'en' group (because our 
> filename is 'default' but not an language code). But using third rule 
> from p.1 all "en*" languages will be successfully switched to 'en-us' 
> "parallel" language.  
>
> *NOTE:* default.py is not automatically updated with translations (using 
> translator.findT()) like the other language files, so any changes should 
> be done manually.
>
> With the best regards,
> Vladyslav Kozlovskyy (Ukraine)
>
> P.S. Please fill free to send any bug reports, propositions or questions 
> to me about this subsystem.
> Четвер, 12 липня 2012 р. 20:37:16 UTC+3 користувач rochacbruno написав:
>>
>> I need something like this.
>>
>> <h1> {{=T("Here I will put the awesome title")}} </h1>
>>
>> So I will create files for languages:
>>
>> en.py
>>
>> {"Here I will put the awesome title": "My Title"}
>>
>> pt-br.py
>>
>> {"Here I will put the awesome title": "Meu título"}
>>
>> an so..
>>
>> Should it works?
>>
>

Reply via email to