Zadejte hledaný výraz...

Problém s vícejazyčným webem

Ahoj,
mám jazykové verze webu vyřešené tak, že mám v cs.php en.php atd. - tam je třída LanguageLocal(); a tam v jedné metodě vícerozměrné pole s texty. Všechny jazyky mají stejný název třídy a podle rozpoznaného jazyku includui tu potřebnou, ale mám teď problém, že mám CRON, kde je potřeba při určitém stavu zaslat e-mail, jenže jednou je to uživatel z Česka podruhé z Německa atd. ... v momentě kdy includui třídu, kde se zasílá e-mail už mám nastavený jazyk a includovaný ten "správný" jazyk, jelikož ho pak používám v těch třídách a jinde na webu.
A teď k jádru problému: potřebuji vlastně aby Čechovi odešel e-mail v češtině a Němcovi v němčině atd., ale jelikož mají třídy stejný název, tak vlastně nemůžu redeklarovat třídu, nevíte jak by se to dalo obejít?
mám něco ve stylu:
class Language {
//tady je metoda get, která se mi podívá do lokálního jazyku a řekne jestli je nebo není
}
a pak:
class LocalLanguage extends Language {
// tady je to pole s texty v jedné metodě
}
jednoduchý příklad:
include 'language.php'; // trida Language()
include 'cs.php'; // trida LanguageLocal() s českými překlady
include 'cron.php';
a v cron.php mám třeba sendEmail();
v sendEmail() si zjistím, že uživatel je třeba z Česka v tom případě není problém (čeština je inicializovaná), jenže druhý bude z Německa => potřebuji includovat 'de.php' - třída LanguageLocal() s německými překlady - a to je ten problém protože mi vyskočí, že nejde udělat redeclare třídy LanguageLocal();
...doufám, že chápete o co mi de a jak to aktuálně funguje.
Díky za rady :-)
6. 7. 2013 11:54:40
https://webtrh.cz/diskuse/problem-s-vicejazycnym-webem#reply919957
unlucky
verified
rating uzivatele
(16 hodnocení)
6. 7. 2013 12:42:49
Napsal martin20a;970080
že uživatel je třeba z Česka v tom případě není problém (čeština je inicializovaná), jenže druhý bude z Německa
kdo druhy? Staci davat podminky ne a podle toho includovat? oO
6. 7. 2013 12:42:49
https://webtrh.cz/diskuse/problem-s-vicejazycnym-webem#reply919956
Napsal unlucky;970099
kdo druhy? Staci davat podminky ne a podle toho includovat? oO
Jak jsem psla bude to script co zasílá e-maily, hodně jednoduše to můžu ukázat takto:
// pole s daty
$x = array();
$x[] = array(
'user_id' => 1,
'lang' => 'cs'
);
$x[] = array(
'user_id' => 6,
'lang' => 'en'
);
//pro každého uživatele v poli potřebuji odeslat e-mail v jejich jazyce =>
//1.iterace
include 'cs.php' // kde je třída LocalLanguage();
//...vše proběhne v pořádku
//2.iterace
include 'en.php' // kde je opět LocalLanguage(); => fatal error - nelze redeklarovat
a jelikož po prvním include 'cs.php' už máš tu třídu všude, tak nepomůže ani udělat druhou instanci třídy pro zaslání e-mailu
6. 7. 2013 13:18:43
https://webtrh.cz/diskuse/problem-s-vicejazycnym-webem#reply919955
Hm, nenapadá mě nic lepšího, že rozesílat po skupinách. Nejdřív české, pak německé, apod. To by se dalo řešit více soubory.
6. 7. 2013 13:29:16
https://webtrh.cz/diskuse/problem-s-vicejazycnym-webem#reply919954
Napsal iCrow;970106
Hm, nenapadá mě nic lepšího, že rozesílat po skupinách. Nejdřív české, pak německé, apod. To by se dalo řešit více soubory.
No právě to není tak jednoduché, jelikož části jsou propojené a při některých situací se třeba musí poslat e-mail Angličanovi, ale odesílat se to bude z webu v češtině jelikož se odešle na základě akce českého uživatele.
Takže vlastně jsem i otevřený návrhům, jak změnit fungování jazyků aby to fungovalo jak má, podmínka je aby to bylo třídami.
6. 7. 2013 13:32:59
https://webtrh.cz/diskuse/problem-s-vicejazycnym-webem#reply919953
Zkusil bych používat namespace. Nevím, jak to bude složité zapracovat do stávajícího programu. Očekával bych ale, že bude existovat jedna funkce pro načítání jazyků, která se o to automaticky postará.
Takže místo include cs.php se bude volat funkce loadLanguage('cs'), která se sama postará o include cs.php, plus vytvoří instanci třídy csLanguageLocal(), která bude i jejím návratovým typem.
V případě, že neexistuje jedna funkce pro načtení jazyků, tak budeš muset všude nahradit new LanguageLocal() za new csLanguageLocal(). Pomocí namespace docílíš toho, že budeš moci použít stejný název třídy ve více souborech, pozor ale na přístup u vytváření takových tříd, musí obsahovat i namespace.
6. 7. 2013 13:52:06
https://webtrh.cz/diskuse/problem-s-vicejazycnym-webem#reply919952
Tak jsem to za pomoci HarkIV vyřešili přes namespace... díky!
6. 7. 2013 15:21:22
https://webtrh.cz/diskuse/problem-s-vicejazycnym-webem#reply919951
Pro odpověď se přihlašte.
Přihlásit