TL; DR
Tercümenin nasıl çalıştığıyla ilgili ayrıntılara ilgi duymuyorsanız, içeriği Tercümenizin işe yarayıp yaramadığını
kontrol etmek için içeriğe atlayın , özellikle de
Modül Kapsamında Çeviri çatışması alt bölümü .
Magento Tercüme Genel Bakış
Magento, çeviri kaynaklarına öncelik verir (en yüksekten en düşüğe):
- DB (
core_translate
tablo)
- Tema
translate.csv
dosyası
app/locale/*/*.csv
dosyalar
Çeviri dizisi nasıl oluşturulur?
Modül Çevirileri
Öncelikle app/locale/*/*.csv
ondan bütün aktif etc/config.xml
dosyalardan referans alınan dosyalar ayrıştırılır. İşte sürecin bir özeti:
Magento aşağıdaki config.xml
bölümü bulduğunu varsayalım :
<!-- excerpt from Mage/Catalog/etc/config.xml -->
<frontend>
<translate>
<modules>
<Mage_Catalog>
<files>
<default>Mage_Catalog.csv</default>
</files>
</Mage_Catalog>
</modules>
</translate>
</frontend>
Ve bu dosyada, geçerli mağaza görünümü için yapılandırılmış yerel ayar için aşağıdaki çeviri belirtildi:
"AAA","BBB"
Bu koşullar altında, Magento, çeviri dizisinde aşağıdaki kayıtları oluşturur:
array(
"AAA" => "BBB",
"Mage_Catalog::AAA" => "BBB"
)
İkinci değer, Modül Kapsam Çevirisidir . Ön ekli modül adı, çeviri dosyası bildirimini içeren config XML düğümünden alınmıştır.
Aynı çeviri bir tarafından tekrar belirtilirse ikinci modül dosyası içinde, örneğin Some_Module.csv
çevirisidir "AAA","CCC"
, bu olacak OVERWRİTE DEĞİL"AAA"
ayarı. Bunun yerine, yalnızca ikinci modül adıyla yeni bir kayıt ekleyecektir "Some_Module::AAA" => "CCC"
.
Geliştirici modu etkinse, başka bir modül çevirisinde aynı anahtarla ikinci bir kayıt bulursa , kaydı bile ayarlayamaz"AAA"
. Bu, geliştirme sırasında modül çeviri çakışmalarını tespit etmeyi kolaylaştırır.
Tema Çevirileri
İkincisi, translate.csv
geçerli yerel ayar için temanın geri dönüşüne ilk dosyadan yüklenen çeviriler, çeviri dizisindeki varolan kayıtları değiştirir.
Bu nedenle önceki örneğe devam etmek gerekirse, bir translate.csv
kayıt "AAA","DDD"
aşağıdaki çeviri verilerine yol açacaktır:
array(
"AAA" => "DDD", // This is overwritten by the translate.csv file
"Mage_Catalog::AAA" => "BBB",
"Some_Module::AAA" => "CCC"
)
Tabii ki translate.csv
yeni çeviri tuşları ile kayıtlar sadece diziye eklenir.
Veritabanı Çevirileri
Çeviriler core_translate
masaya temelde sadece tema çeviriler gibi tercüme diziye birleştirilir.
Modül veya tema çevirilerindeki mevcut anahtarların üzerine veritabanı kayıtları yazılır, yenileri eklenir.
Çeviri Araması
Tüm __()
yöntemi denir Magento birinci akım modülü eşleşen dizideki bir çeviri arar.
Geçerli modül, __()
sınıfın çağrıldığı sınıf adına göre belirlenir . Örneğin, bloklarda sorumlu yöntem şöyle görünür:
// Excerpt from Mage/Core/Block/Abstract.php
public function getModuleName()
{
$module = $this->getData('module_name');
if (is_null($module)) {
$class = get_class($this);
$module = substr($class, 0, strpos($class, '_Block'));
$this->setData('module_name', $module);
}
return $module;
}
Yardımcı ve Denetleyicilerdeki yöntemler buna göre çalışır.
Örnek Arama Senaryoları
Örneğin, $this->__('AAA')
bir şablon dosyasında çağrıldığını söyleyelim . İlişkili bloğun türü varsa Mage_Core_Block_Template
, Magento ilk önce bir Mage_Core::AAA
kaydı kontrol edecektir . Bulamazsa, anahtarın çevirisine geri döner AAA
.
Örnek senaryoda bu, çeviriden kaynaklanır DDD
( translate.csv
dosyadan).
Farklı bir senaryoda, ilişkili blok olabilir Mage_Catalog_Block_Product_View
. Bu durumda, Magento önce bir çeviri kaydını kontrol Mage_Catalog::AAA
eder ve çeviriyi bulurdu AAA
.
Dolayısıyla, modül kapsam çevirileri genel çevirilerden daha yüksek önceliğe sahiptir . Hangi çevirinin kullanılacağı, sınıfın __()
yöntemi çağırmasından hangi modülün kullanıldığına bağlıdır .
Çevirinizin işe yarayıp yaramadığını kontrol etmek için ne
Bir translate.csv
dosyadan çeviriniz kullanılmıyorsa, bu kontrol listesini izleyin:
- Çeviri önbelleği kapatıldı / yenilendi mi? (Çözüm: önbelleği temizleyin)
- Mı
translate.csv
dosyası geçerli mağaza için tema yedeği gerçekten? (Çözüm: tema yapılandırmasını düzeltin)
core_translate
Tablodaki çeviri için çelişkili bir kayıt var mı ? (Çözüm: çakışan kaydı listeden kaldırın core_translate
)
- Tüm önceki noktalar neden değilse, farklı bir modülden çakışan bir çeviri yapılmalıdır. (Çözüm: aşağıya bakın)
Module Scope Translation çakışmaları için çözüm
Son durumu doğru bulursanız, çeviriyi yapan modülün modül kapsamı translate.csv
ile çeviriyi ikinci kez eklemeniz yeterlidir .
Örneğin, her zaman isteseydi AAA
olarak çevrilecek DDD
tema çeviri yoluyla aşağıdaki konularda bu yapabilirdi translate.csv
:
"AAA","DDD"
"Mage_Catalog::AAA","DDD"
"Some_Module::AAA","DDD"
Uygulamada, modül kapsamını yalnızca çeviriye bir çelişki varsa, yani çeviri çalışmıyorsa eklerim.
ek Notlar
Satır İçi Çeviri
Magento'nun satır içi çevirme özelliği core_translate
, modül kapsamı önekini kullanarak özel çevirileri tabloya ekler .
Geriye dönük uyumluluk
Tema çevirilerinin önceliği, Magento versiyon 1.3 ya da öylesine daha önceki veritabanı çevirilerinden daha yüksekti.
XML Çevirisi
Magento bazen değerlendirmek translate=""
bağımsız değişkenleri config.xml
, system.xml
çocuk düğüm değerlerini çevirmek ve düzen XML. Çeviri kapsamı için modül belirtmek üzere argüman
kullanılarak bu durumlarda bir yardımcı sınıf belirtilebilir module=""
.
Hayır ise module
argüman XML belirtilmişse, core/data
yardımcı çocuk düğüm değerlerini çevirmek için kullanılır.
Daha fazla bilgi
Bu yazıda Magento çeviri işleminin bazı ayrıntılarını anladığımı itiraf ediyorum, ancak yalnızca çok fazla bilgi istemediğim için.
- Çeviri dizisi oluşturulurken bazı teknik detaylar
- Modüller için ek çeviri dosyaları kullanma imkanı
core_translate
Kayıtlar için mağaza görünümü kapsamı
- Farklı çeviri yöntemlerini kullanarak lehte ve aleyhte olanlar
Daha fazla bilgi gerekirse lütfen ayrı bir soru sorun.