I18n: Porovnání verzí

Z Freenetis Wiki
Přejít na: navigace, hledání
 
(Není zobrazeno 9 mezilehlých verzí od 2 dalších uživatelů.)
Řádek 1: Řádek 1:
Internacionalizace ve Freenetisu se týká 2 oblastí:
+
[[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 17: Řádek 20:
 
|3 || 1 || Honorary member
 
|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 pouze "kategorizuje" jednotlivé hodnoty, uložené v sloupci id, do šuplíčků "typ člena", "typ kontaktu", ... atd.
+
Tabulka enum_types obsahuje výpis všech typů v defaultním jazyce (zde je zvolena angličtina)
  
Ke každé hodnotě id z této tabulky ještě musíme přiřadit řetězec a všechny jeho překlady, k čemuž potřebujeme další tabulku enum_values:
+
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"
|+ enum_values:  
+
|+ translations:  
! id !! enum_types_id !! lang  !! value
+
! id !! original_term !! translated_term !! lang
 
|-
 
|-
| 1 || 1 || cz || Řádný
+
| 1 || Regulary member || Řádný člen || cs
 
|-
 
|-
| 2 || 1 || en || Regular
+
| 2 || Regulary member || Regular member || en
 
|-
 
|-
| 3 || 1 || de || Ordentlich
+
| 3 || Regulary member || Ordentlich Mitglied || de
 
|-
 
|-
| 4 || 2 || cz|| Jabber
+
| 4 || Phone || Telefon || cs
 
|-
 
|-
| 5 || 2 || en || ICQ
+
| 5 || Phone || Telefon || de
 
|-
 
|-
| 6 || 2 || de || Skype
 
 
|}
 
|}
  
 +
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, enum_values.value FROM enum_types
+
  SELECT enum_types.id, IFNULL(translations.translated_term,enum_types.value) as value FROM enum_types
  JOIN enum_values on enum_types.id=enum_values.enum_types_id
+
  LEFT JOIN translations on enum_types.value = translations.original_term
  WHERE type_id=1 AND enum_values.lang="cz"
+
  WHERE enum_types.type_id=1 AND translations.lang="cs"
 
 
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...
 

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:


enum_types:
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:

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"