Autor Zpráva
lang
Profil *
Dobrý den, potřeboval bych poradit ohledně překladu v souborech *.js

Mám vytvořenou rozsáhlou webovou aplikaci v angličtině, no a teď do ní potřebuju implementovat překládání i pro jiné jazyky.
V souborech *.php to není problém, ale jak přeložit výstup z javascriptu, aniž bych musel každý JS soubor předělávat na PHP nebo z něj odstranit veškerý text a pomocí PHP to nějak kontrolovat (třeba AJAXem), co mi to vlastně ten JS chce.

Přes to PHP to mám řešený přes třídu (echo Lang::text();) a ve třídě si načtu data z DB podle toho v jakém jazyce to potřebuji.

Chtěl bych vědět jestli s tím už někdo nemá zkušenosti a jaké řešení by bylo asi nejefektivnější.

Příklad jak to zatím funguje: kliknu na vlajku(v jakém jazyce to potřebuji)->reload stránky->php mi přeloží texty v php souborech a vygeneruje stránku ve zvoleném jazyce. A teď bych teda potřeboval nějak přeložit i ty javascriptové výstupy.

Můj návrh jak to udělat - udělat si v DB tabulku která by obsahovala veškerý text javascriptu k danýmu JS souboru. Pak pomocí PHP připojit veškerý texty k nějaký JS funkci (vím přesně, které soubory se mi budou na jaký stránce načítat) a vždy, když by se aktivoval JS tak by si do téhle JS funkce šáhnul pro daný text - "moc pracné" a další zbytečná data v DB, když už je mám v jiné tabulce (pro PHP překlad ).

Další řešení co mně napadlo - kdykoliv by JS vrátil nějaký výstup tak těsně před tím si šáhnout přes AJAX do DB pro překlad - vzhledem k velikosti DB, která obsahuje překlady, a četnosti pužívání webové aplikace by to znamenalo extrémní zpomalení nejen u koncového uživatele, ale i samotné DB což by se projevilo na každé jednotce, která s webovou aplikací zrovna pracuje a to je značně nežádoucí.

Taže bych potřeboval nějaký řešení, ve kterém nebudu muset vytvářet duplicitní data v DB, přejmenovávat soubory a zároveň aby to bylo co nejrychlejší

(jedná se o interní webovou aplikaci, takže nějaký google translate a podobný nepřipadá v úvahu, na Oracle a podbný nemám prachy :D )
YoSarin
Profil
lang:
Šlo by to velmi podobně jako v tom PHP - vytvořit si třídu pro překlad v JS a všechny stringy vkládat přes tuto třídu. Není nutné brát data pokaždé z databáze (pokud se výstupní stringy pro JS nemění příliš často). Pak stačí jeden javascriptový soubor generovaný pomocí PHP (bude obsahovat potřebné stringy) a stačí ho vygenerovat třeba jednou denně a jen s potřebnými daty:
PHP:
// PHP soubor generující JSON data pro překlad do nějakého jazyka (do stránky stačí includovat jen jeden soubor s aktuálně používaným překladem)
// nemusí (a neměl by) obsahovat všechny stringy z DB, ale jen ty, které jsou pro JS potřeba
$strings = array(
  'original 1' => 'translation 1',
  'original 2' => 'translation 2',
  ...
);
echo 'var lang = ' . json_encode($strings) . ';';

JS:
// JS překladová třída (čistě schematicky)
var Translation = {
  
  translate : function(string)
  {
    if (typeof lang[string] != 'undefined') {
      return lang[string];
    } else {
      return string;
    }
  }
}

A všechny stringy v JS pak vypisovat pomocí Translation.translate('text'); (případně si udělat nějakou obalovací funkci s kratším názvem)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0