I18n: Porovnání verzí

Z Freenetis Wiki
Přejít na: navigace, hledání
Řádek 9: Řádek 9:
 
{| 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 ||
 
|-  
 
|-  
|3 || 1
+
|3 || 1 ||
 
|-  
 
|-  
|4 || 2 (=např. typ kontaktu)
+
|4 || 2 (=např. typ kontaktu) ||
 
|-  
 
|-  
|5 || 2
+
|5 || 2 ||
 
|-  
 
|-  
|6 || 2
+
|6 || 2 ||
 
|}
 
|}
 
Tabulka enum_types pouze "kategorizuje" jednotlivé hodnoty, uložené v sloupci id, do šuplíčků "typ člena", "typ kontaktu", ... atd.
 
Tabulka enum_types pouze "kategorizuje" jednotlivé hodnoty, uložené v sloupci id, do šuplíčků "typ člena", "typ kontaktu", ... atd.

Verze z 11. 10. 2008, 23:48

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
3 1
4 2 (=např. typ kontaktu)
5 2
6 2

Tabulka enum_types pouze "kategorizuje" jednotlivé hodnoty, uložené v sloupci id, do šuplíčků "typ člena", "typ kontaktu", ... atd.

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:

enum_values:
id enum_types_id lang value
1 1 cz Řádný
2 1 en Regular
3 1 de Ordentlich
4 2 cz Jabber
5 2 en ICQ
6 2 de Skype


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...