I18n
Z Freenetis Wiki
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) | Jabber |
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 | enum_types_id | value | lang |
---|---|---|---|
1 | 1 | Řádný | cs |
2 | 1 | Regular | en |
3 | 1 | Ordentlich | de |
4 | 2 | Jabber | cs |
5 | 2 | ICQ | en |
6 | 2 | Skype | de |
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, enum_values.value FROM enum_types JOIN enum_values on enum_types.id=enum_values.enum_types_id WHERE type_id=1 AND enum_values.lang="cz"
Tento dotaz to chce dovymyslet tak, aby - když překlad do požadovaného jazyka chybí, tak to vrátilo třeba první nalezený jazyk...