I18n: Porovnání verzí
Z Freenetis Wiki
(Není zobrazeno 11 mezilehlých verzí od 2 dalších uživatelů.) | |||
Řádek 1: | Řádek 1: | ||
− | Internacionalizace ve | + | [[en:I18n (english)]] |
+ | [[ru:I18n (русский)]] | ||
+ | |||
+ | Internacionalizace ve FreenetISu se týká 2 oblastí: | ||
* řetězců, které jsou obsaženy ve zdrojových kódech - tato se provádí pomocí jazykových souborů v adresáři i18n | * řetězců, které jsou obsaženy ve zdrojových kódech - tato se provádí pomocí jazykových souborů v adresáři i18n | ||
Řádek 9: | Řádek 12: | ||
{| border="1" class="wikitable" | {| border="1" class="wikitable" | ||
|+ enum_types: | |+ enum_types: | ||
− | ! id !! type_id | + | ! id !! type_id !! value |
|- | |- | ||
− | | 1 || 1 (=např. typ člena) | + | | 1 || 1 (=např. typ člena) || Applicant |
|- | |- | ||
− | |2 || 1 | + | |2 || 1 || Regular member |
|- | |- | ||
− | |3 || 1 | + | |3 || 1 || Honorary member |
|- | |- | ||
− | |4 || 2 (=např. typ kontaktu) | + | |4 || 2 (=např. typ kontaktu) || Phone |
|- | |- | ||
− | |5 || 2 | + | |5 || 2 || ICQ |
|- | |- | ||
− | |6 || 2 | + | |6 || 2 || Skype |
|} | |} | ||
− | Tabulka enum_types | + | Tabulka enum_types obsahuje výpis všech typů v defaultním jazyce (zde je zvolena angličtina) |
− | + | Překlady k jednotlivým řádkům z enum_types budeme získávat z tabulky translations: | |
{| border="1" class="wikitable" | {| border="1" class="wikitable" | ||
− | |+ | + | |+ translations: |
− | ! id !! | + | ! id !! original_term !! translated_term !! lang |
|- | |- | ||
− | | 1 || | + | | 1 || Regulary member || Řádný člen || cs |
|- | |- | ||
− | | 2 || | + | | 2 || Regulary member || Regular member || en |
|- | |- | ||
− | | 3 || | + | | 3 || Regulary member || Ordentlich Mitglied || de |
|- | |- | ||
− | | 4 || | + | | 4 || Phone || Telefon || cs |
|- | |- | ||
− | | 5 || | + | | 5 || Phone || Telefon || de |
|- | |- | ||
− | |||
|} | |} | ||
+ | Díky faktu, že obě tabulky nejsou provázané klíči, můžeme použít tabulky translations i na překlady termínů z jiných tabulek než enum_types. | ||
Běžný dotaz pro získání id a jemu odpovídajícího řetězce určitého jazyka pro typy členů (type_id=1): | Běžný dotaz pro získání id a jemu odpovídajícího řetězce určitého jazyka pro typy členů (type_id=1): | ||
− | SELECT enum_types.id, | + | SELECT enum_types.id, IFNULL(translations.translated_term,enum_types.value) as value FROM enum_types |
− | JOIN | + | LEFT JOIN translations on enum_types.value = translations.original_term |
− | WHERE type_id=1 AND | + | WHERE enum_types.type_id=1 AND translations.lang="cs" |
− | |||
− |
Aktuální verze z 10. 12. 2013, 12:12
Internacionalizace ve FreenetISu se týká 2 oblastí:
- řetězců, které jsou obsaženy ve zdrojových kódech - tato se provádí pomocí jazykových souborů v adresáři i18n
- řetězců v databázi - řetězce v databázi není ve většině případů nutné překládat. Výjimkou jsou výčtové typy - např. typy členů, zařízení, kontaktů, které lze editovat i přes webové rozhraní. Protože instalace Freenetis-u obsahuje základní hodnoty pro tyto typy, bylo nutné pro ně vymyslet i internacionalizaci.
Výčtové typy jsou implementovány pomocí 2 tabulek:
id | type_id | value |
---|---|---|
1 | 1 (=např. typ člena) | Applicant |
2 | 1 | Regular member |
3 | 1 | Honorary member |
4 | 2 (=např. typ kontaktu) | Phone |
5 | 2 | ICQ |
6 | 2 | Skype |
Tabulka enum_types obsahuje výpis všech typů v defaultním jazyce (zde je zvolena angličtina)
Překlady k jednotlivým řádkům z enum_types budeme získávat z tabulky translations:
id | original_term | translated_term | lang |
---|---|---|---|
1 | Regulary member | Řádný člen | cs |
2 | Regulary member | Regular member | en |
3 | Regulary member | Ordentlich Mitglied | de |
4 | Phone | Telefon | cs |
5 | Phone | Telefon | de |
Díky faktu, že obě tabulky nejsou provázané klíči, můžeme použít tabulky translations i na překlady termínů z jiných tabulek než enum_types.
Běžný dotaz pro získání id a jemu odpovídajícího řetězce určitého jazyka pro typy členů (type_id=1):
SELECT enum_types.id, IFNULL(translations.translated_term,enum_types.value) as value FROM enum_types LEFT JOIN translations on enum_types.value = translations.original_term WHERE enum_types.type_id=1 AND translations.lang="cs"