TL; DR
Jeśli nie jesteś zainteresowany szczegółami, w jaki sposób działa tłumaczenie, pomiń treść do sekcji
Co sprawdzić, czy tłumaczenie nie działa poniżej, szczególnie podsekcja
Rozwiązanie konfliktów w zakresie zakresu modułów .
Przegląd tłumaczeń Magento
Magento nadaje priorytet źródłom tłumaczeń (od najwyższego do najniższego):
- DB (
core_translate
tabela)
- Tematem
translate.csv
plik
- te
app/locale/*/*.csv
pliki
Jak zbudowana jest tablica tłumaczeń?
Tłumaczenia modułów
Najpierw parsowane są wszystkie pliki, do app/locale/*/*.csv
których istnieją odniesienia z etc/config.xml
plików aktywnych modułów . Oto przewodnik po tym procesie:
Załóżmy, że Magento znajduje następującą config.xml
sekcję:
<!-- excerpt from Mage/Catalog/etc/config.xml -->
<frontend>
<translate>
<modules>
<Mage_Catalog>
<files>
<default>Mage_Catalog.csv</default>
</files>
</Mage_Catalog>
</modules>
</translate>
</frontend>
W tym pliku podano następujące tłumaczenie dla ustawień regionalnych skonfigurowanych dla bieżącego widoku sklepu:
"AAA","BBB"
W tych okolicznościach Magento tworzy w tablicy tłumaczeń następujące rekordy:
array(
"AAA" => "BBB",
"Mage_Catalog::AAA" => "BBB"
)
Druga wartość to tłumaczenie zakresu modułu . Prefiksowana nazwa modułu jest pobierana z węzła config XML zawierającego deklarację pliku tłumaczenia.
Jeśli to samo tłumaczenie jest określone ponownie przez drugiego pliku modułu , np Some_Module.csv
tłumaczenie jest "AAA","CCC"
, to będzie Nie zastępuj na "AAA"
ustawienie. Zamiast tego doda tylko nowy rekord z nazwą drugiego modułu "Some_Module::AAA" => "CCC"
.
Jeśli włączony jest tryb dewelopera, to nawet rozbroić ten "AAA"
rekord, jeżeli stwierdzi drugi rekord z tym samym kluczem w innym tłumaczeniu modułu. Ułatwia to wykrywanie konfliktów translacji modułów podczas programowania.
Tłumaczenia tematyczne
Po drugie, tłumaczenia wczytane z pierwszego translate.csv
pliku w zastępczej kompozycji dla bieżących ustawień regionalnych po prostu zastępują istniejące rekordy w tablicy tłumaczeń.
Kontynuując poprzedni przykład, translate.csv
zapis "AAA","DDD"
prowadziłby do następujących danych tłumaczenia:
array(
"AAA" => "DDD", // This is overwritten by the translate.csv file
"Mage_Catalog::AAA" => "BBB",
"Some_Module::AAA" => "CCC"
)
Oczywiście rekordy translate.csv
z nowymi kluczami do tłumaczenia są po prostu dodawane do tablicy.
Tłumaczenia bazy danych
Tłumaczenia z core_translate
tabeli są w zasadzie łączone w tablicę tłumaczeń, podobnie jak tłumaczenia motywów.
Istniejące klucze z tłumaczenia modułu lub motywu są nadpisywane przez rekordy bazy danych, dodawane są nowe.
Wyszukiwanie tłumaczeń
Po __()
wywołaniu metody Magento najpierw szuka tłumaczenia w tablicy pasującego do bieżącego modułu.
Bieżący moduł jest określony przez nazwę klasy, na której __()
klasa jest wywoływana. Na przykład w blokach odpowiedzialna metoda wygląda następująco:
// 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;
}
Metody w Pomocnikach i Kontrolerach działają odpowiednio.
Przykładowe scenariusze wyszukiwania
Na przykład, powiedzmy, że $this->__('AAA')
jest wywoływany w pliku szablonu. Jeśli skojarzony blok ma typ Mage_Core_Block_Template
, Magento najpierw sprawdzi Mage_Core::AAA
rekord. Jeśli go nie znajdzie, wróci do tłumaczenia klucza AAA
.
W przykładowym scenariuszu spowoduje to tłumaczenie DDD
(z translate.csv
pliku).
W innym scenariuszu skojarzonym blokiem może być Mage_Catalog_Block_Product_View
. W takim przypadku Magento najpierw sprawdzi rekord tłumaczenia Mage_Catalog::AAA
i znajdzie tłumaczenie AAA
.
W efekcie tłumaczenia zakresu modułów mają wyższy priorytet niż wszelkie tłumaczenia ogólne . To, które tłumaczenie zostanie zastosowane, zależy od tego, który moduł klasy wywołuje __()
metodę.
Co sprawdzić, jeśli tłumaczenie nie działa
Jeśli tłumaczenie z translate.csv
pliku nie jest używane, postępuj zgodnie z poniższą listą kontrolną:
- Czy pamięć podręczna tłumaczenia jest wyłączona / odświeżona? (Rozwiązanie: wyczyść pamięć podręczną)
- Czy
translate.csv
plik naprawdę zawiera kreację zastępczą dla bieżącego sklepu? (Rozwiązanie: napraw konfigurację motywu)
- Czy w
core_translate
tabeli występuje sprzeczny zapis tłumaczenia ? (Rozwiązanie: usuń sprzeczny rekord z core_translate
)
- Jeśli wszystkie poprzednie punkty nie są przyczyną, musi istnieć sprzeczne tłumaczenie z innego modułu. (Rozwiązanie: patrz poniżej)
Rozwiązanie konfliktów translacji zakresu modułów
Jeśli okaże się ostateczna przypadek jest prawdziwy, wystarczy dodać tłumaczeniu po raz drugi do Twojego translate.csv
z zakresu modułu modułu robi tłumaczenia.
W tym przykładzie, jeśli zawsze chciałeś AAA
być tłumaczony za DDD
pomocą tłumaczenia motywu, możesz to zrobić w translate.csv
:
"AAA","DDD"
"Mage_Catalog::AAA","DDD"
"Some_Module::AAA","DDD"
W praktyce dodam zakres modułu do tłumaczenia tylko wtedy, gdy występuje konflikt, to znaczy, jeśli tłumaczenie nie działa.
Dodatkowe uwagi
Tłumaczenie Inline
Funkcja tłumaczenia wbudowanego Magento dodaje również niestandardowe tłumaczenia do core_translate
tabeli przy użyciu prefiksu zakresu modułu.
Kompatybilność wsteczna
Priorytet tłumaczeń motywów był wyższy niż tłumaczenia baz danych aż do wersji Magento 1.3.
Tłumaczenie XML
Magento czasami ocenić translate=""
argumenty config.xml
, system.xml
i układ XML do przeliczenia wartości węzłów potomnych.
W takich przypadkach można określić klasę pomocnika, używając module=""
argumentu do określenia modułu dla zakresu tłumaczenia.
Jeśli module
w pliku XML nie podano żadnego argumentu, core/data
pomocnik służy do tłumaczenia wartości węzłów potomnych.
Dalsza informacja
Przyznaję, że w tym poście opisałem kilka szczegółów procesu tłumaczenia Magento, ale tylko dlatego, że nie chcę za dużo informacji.
- Niektóre szczegóły techniczne podczas budowania tablicy translacji
- Możliwość użycia dodatkowych plików tłumaczeń dla modułów
- Przechowuj zakres widoku dla
core_translate
rekordów
- Plusy i minusy za pomocą różnych metod tłumaczenia
Jeśli potrzebujesz więcej informacji, zadaj osobne pytanie.