Php data multilíngüe: como?
Nota: esta não é uma duplicata deTraduzindo PHP data () para o site multilíngüe . Eu li isso!
Desculpe, primeiro preciso explicar como meu framework funciona, para que você possa entender precisamente onde está meu problema:
Veja como funciona o meu código PHP (princípios aproximados). Vamos usar por exemplo alguém que queira ver o URLhttp://myweb.com/valid.php
:
valid.php
o código inclui a definição de classes correta, então crie um objeto e chame a funçãodisplay()
que exibe a página.no arquivovalid.php
, quando o objeto é criado, ele analisa o host, e no host há o idioma (http://
us
.myweb.com/
, http://
cn
.myweb.com/
, http://
fr
.myweb.com/
...) e o idioma padrão (se nenhum for encontrado) é o inglêsentão eu carrego um arquivo Php em cache onde estão as traduções. Isto é umtranslation
objeto, que eu estou chamando$t
abreviadoe de agora em diante, sempre que eu quero uma tradução, eu apenas faço coisas como$t->get('my_string')
.Vamos dar um exemplo com o arquivo de 2 idiomas:
2 arquivos de idiomas:cache.us.php
ecache.fr.php
emcache.us.php
você tem uma linha como esta:$thanks_for_the_fish = "Thanks for the fish"
.emcache.fr.php
você tem uma linha como esta:$thanks_for_the_fish = "Merci pour le poisson"
.Eu construo minha página, incluo o arquivo de idioma correto e, em seguida, chamo$t->get('thanks_for_the_fish')
e é traduzido.Agora meu problema vem com formatação de data. Com formato de data abreviada, não é um problema:
emcache.us.php
: $short_date_format = "m/d/Y, H:i"
.emcache.fr.php
: $short_date_format = "d/m/Y à H:i"
.Mas comlongo formato de data, estou apenas trabalhando em francês e comecei com algo como:
emcache.fr.php
: $long_date_format = "%s, %d %s %d"
.então todos os dias:$sunday = "dimanche"
, $monday = "lundi"
e assim por dianteentão no meu código de tradução:Algo parecido com isto (leia atentamente o comentário no código, a minha pergunta está nele!):
static private $_TabStrDaysOfWeek = array(
0 => 'sunday',
1 => 'monday',
...,
6 => 'saturday'
);
public function translateDate($date_time)
{
$long_day = $this->tr->get(
$this->_TabStrDaysOfWeek[ $date_time->format('w') ]
);
/*
here's where I'm stuck:
what could be the code to be able to display:
- english:
Monday, 1st September 2006
Tuesday, 2nd September 2006
Wednesday, 3rd September 2006
Thursday, 4th September 2006
- french:
Lundi, 1 septembre 2006
Mardi, 2 septembre 2006
Mercredi, 3 septembre 2006
Jeudi, 4 septembre 2006
- arabian!!:
1 - Don't know
2 - Don't know
3 - Don't know
4 - Don't know
*/
}
... E eu disse arabian porque vou precisar disso mais cedo ou mais tarde, mesmo para mandarim. Todos os meus outros problemas de tradução estão resolvidos, mas este aqui !!
Qualquer ideia?