sql >> Databáze >  >> RDS >> Mysql

Nejúčinnější přístup pro vícejazyčné webové stránky PHP

Několik úvah:

1. Překlady
Kdo bude dělat překlady? Lidé, kteří jsou také připojeni k webu? Překladatelská agentura? Při používání Gettextu budete pracovat se soubory 'pot' (.po). Tyto soubory obsahují ID zprávy a řetězec zprávy (překlad). Příklad:

msgid "A string to be translated would go here"  
msgstr ""

Nyní to vypadá dobře a srozumitelně pro každého, kdo to potřebuje přeložit. Co se ale stane, když místo celých vět použijete klíčová slova, jak navrhuje Mike? Pokud někdo potřebuje přeložit msgstr s názvem "address_home", nemá ponětí, jestli to má být hlavička "Home address" nebo že je to celá věta. V tomto případě se ujistěte, že přidáváte komentáře k souboru těsně předtím, než zavoláte funkci gettext, například takto:

/// This is a comment that will be included in the pot file for the translators
gettext("ready_for_lost_episode");

Pomocí xgettext --add-comments=/// při vytváření souborů .po přidá tyto komentáře. Nemyslím si však, že by Gettext měl být používán tímto způsobem. Také, pokud potřebujete přidat komentáře s každým text, který chcete zobrazit, a) pravděpodobně v určitém okamžiku uděláte chybu, b) celý skript se stejně vyplní texty, pouze ve formě komentáře, c) komentáře musí být umístěny přímo nad Gettext funkce, která není vždy vhodná v závislosti na pozici funkce ve vašem kódu.

2. Údržba
Jakmile vaše stránky porostou (ještě dále) a vaše jazykové soubory spolu s nimi, může být docela obtížné udržovat všechny různé překlady tímto způsobem. Pokaždé, když přidáte text, musíte vytvořit nové soubory, odeslat soubory překladatelům, přijmout soubory zpět, ujistit se, že struktura je stále neporušená (nežhaví překladatelé vždy rádi přeloží i syntaxi, takže celý soubor nepoužitelný :)) a dokončete import nových překladů. Je to možné, jistě, ale mějte na paměti možné problémy na tomto konci s velkými weby a mnoha různými jazyky.

Další možnost:zkombinujte 2. a 3. alternativu:

Osobně považuji za užitečnější spravovat překlady pomocí (jednoduchého) CMS, uchovávat proměnné a překlady v databázi a příslušné texty exportovat do jazykových souborů sami:

  1. přidat proměnné do databáze (např.:id, stránka, proměnná);
  2. přidat překlady k těmto proměnným (např.:id, varId, language, translation);
  3. vyberte relevantní proměnné a překlady, zapište je do souboru;
  4. zahrňte na své stránky příslušný jazykový soubor;
  5. vytvořte si vlastní funkci pro zobrazení textu proměnných:

text('var'); nebo možná něco jako __('faq','register','lost_password_text');

Bod 3 může být tak jednoduchý, jako vybrat všechny relevantní proměnné a překlady z databáze, vložit je do pole a zapsat serlializované pole do souboru.

Výhody:

  1. Údržba. U velkých projektů může být údržba textů mnohem jednodušší. Proměnné můžete seskupit podle stránky, sekcí nebo jiných částí v rámci svého webu jednoduchým přidáním sloupce do databáze, který definuje, do které části webu tato proměnná patří. Tímto způsobem můžete rychle vytáhnout seznam všech proměnných používaných např. stránku FAQ.

  2. Překládání. Proměnnou můžete zobrazit se všemi překlady všech různých jazyků na jediné stránce. To může být užitečné pro lidi, kteří mohou překládat texty do více jazyků současně. A mohlo by být užitečné vidět další překlady, abyste získali cit pro kontext, aby byl překlad co nejlepší. Můžete se také dotazovat v databázi a zjistit, co bylo přeloženo a co ne. Možná přidejte časová razítka, abyste měli přehled o možných zastaralých překladech.

  3. Přístup. To záleží na tom, kdo bude překládat. CMS můžete zabalit do jednoduchého přihlášení, abyste v případě potřeby udělili přístup lidem z překladatelské agentury a umožnili jim změnit pouze určité jazyky nebo dokonce určité části webu. Pokud to není možnost, stále můžete data odeslat do souboru, který lze ručně přeložit a importovat později (i když to může nastat se stejnými problémy, jaké byly zmíněny dříve). Jako kontext pro překladatele můžete přidat jeden z překladů, který již existuje (angličtinu nebo jiný hlavní jazyk).

Celkově vzato si myslím, že zjistíte, že tímto způsobem budete mít mnohem větší kontrolu nad překlady, zejména z dlouhodobého hlediska. Nemohu vám říci nic o rychlosti nebo účinnosti tohoto přístupu ve srovnání s nativní funkcí gettext. Ale v závislosti na velikosti jazykových souborů si nemyslím, že to bude velký rozdíl. Pokud seskupíte proměnné podle stránky nebo sekce, můžete vždy zahrnout pouze požadované části.



  1. Místní dočasná tabulka v Oracle 10 (pro rozsah uložené procedury)

  2. Povídání o překážkách výkonu SQL Server

  3. EF dotaz na Oracle házení ORA-12704:nesoulad znakové sady

  4. Django post save signál byl volán dvakrát navzdory uid