Ben bir miltilingual site için Zend Framework kullanıyorum. Tercüme Zend_Translate_Adapter_Gettext ile yapılır. Ben poEdit kullanarak. Mo dosyaları hazırlıyorum.
Ben iki msgids kurmak ve bir diğer msgstr özdeş bir msgstr olduğunda sorun:
#: application/modules/foobar/views/scripts/index.phtml:1
msgid "foo"
msgstr "bar"
#: application/modules/foobar/views/scripts/index.phtml:2
msgid "bar"
msgstr "baz"
Bu kodu kullanın:
<?php echo $this->translate('foo'); ?>
<?php echo $this->translate('bar'); ?>
çıktısı şudur:
bazbaz
I msgstr farklı msgid denk ise, onu bir msgid olduğu gibi kullanılır ve bu nedenle yeniden çevrilir bu rakam. Benim akıl yanlış varsa lütfen beni düzeltin.
Şimdi, benzer bir sorun ve nasıl acısız atlatmak için yaşadım olmadığını bilmek istiyorum.
Benim geçerli çözüm msgids değiştirerek içerir:
#: application/modules/foobar/views/scripts/index.phtml:1
msgid "KEY_FOO"
msgstr "bar"
#: application/modules/foobar/views/scripts/index.phtml:2
msgid "KEY_BAR"
msgstr "baz"
ve daha sonra:
<?php echo $this->translate('KEY_FOO'); ?>
<?php echo $this->translate('KEY_BAZ'); ?>
I ~ 10k dosyaları ile bir topluluk portalı üzerinde çalışıyorum ve gerçekten çatışmalar için hepsini kontrol edemiyor çünkü bu tatmin edici bir çözüm değildir.
Herhangi bir kullanım ise:
- Zend Framework sürüm: 1.10.8
- poEdit sürümü: 1.4.6
- Site PHP 5.3 ile Apache 2.2.11 çalışır
[EDIT]
PHP'nin gettext
içeren bir test: Gordon sayesinde, ben verilerin başka bir parça içerebilir. .> "Bar" ve "bar" - -> "baz" anahtar-değer çiftleri I "foo" de dahil olmak üzere çok aynı testi mo dosyası kullanılır. PHP kodu bu oldu:
<?php
putenv('LC_ALL=pl_PL');
setlocale(LC_ALL, 'pl_PL');
bindtextdomain("pl", ".");
textdomain("pl");
echo gettext("foo");
echo gettext("bar");
?>
Ve sonuç:
barbaz
Bu yüzden kesinlikle gettext
'nin suçu değil.