Jak zachować tłumaczenie wtyczek po aktualizacjach?

9

http://wordpress.org/extend/plugins/bbpress/ bbpress 'folder językowy (wp-content / plugins / bbpress / bbp-languages) ma to ostrzeżenie:

/**
 * Do not put custom translations here. They will be deleted on bbPress updates.
 *
 * Keep custom bbPress translations in /wp-content/languages/
 */

W rzeczywistości nie jest to nowy problem i tak, mają rację. Jest to duży problem, jeśli używasz wtyczek wordpress w języku innym niż angielski.

Zasadniczo przetłumaczyłem bbpress i utworzyłem pliki .po i .mo. Pliki działają, jeśli umieszczę je w normalnym folderze wp-content / plugins / bbpress / bbp-languages. Ale jak wspomniano powyżej, ostrzeżenie mówi, że zostanie usunięte po aktualizacji. Ale problem polega na tym, że tłumaczenie nie działa, jeśli umieszczę je w folderze wp-content / languages ​​/ jak sugerowano w bbpress.

Myślę, że musi istnieć hak lub coś, co mogę aktywować, ale jakie jest najlepsze rozwiązanie? Po prostu chcę zachować pliki językowe wtyczek w wp-content / languages ​​/

Ünsal Korkmaz
źródło
no cóż ... po sprawdzeniu kodów bbpress .. wydaje się, że muszę umieścić pliki w / wp-content / languages ​​/ bbpress / nie bezpośrednio / wp-content / languages ​​/ Teraz działa dla bbpress, ale pytanie wciąż wymaga odpowiedzi dla innych wtyczek imo
Ünsal Korkmaz

Odpowiedzi:

3

Musisz zastąpić wywołanie pliku językowego BBpress.

Dobrym miejscem do tego jest plik specyficzny dla języka w twoim katalogu języków ogólnych. W przypadku języka tureckiego byłby to prawdopodobnie plik o nazwie tr_TR.php. Zostanie to załadowane automatycznie i tylko jeśli będzie pasować do języka Twojego bloga. Nie zostanie nadpisany.

BBPress nie używa tej funkcji load_plugin_textdomain, load_textdomainzamiast tego używa . Tutaj możesz znaleźć filtr:

$mofile = apply_filters( 'load_textdomain_mofile', $mofile, $domain );

Więc w swoim języku plik php wystarczy dodać filtr, aby zmienić ścieżkę:

function load_bbpress_tr_mofile( $mofile, $domain )
{
    if ( 'bbpress' == $domain )
    {
        // replace this. :)
        return 'FULL_PATH_TO_YOUR_FILE';
    }
    return $mofile;
}
add_filter( 'load_textdomain_mofile', 'load_bbpress_tr_mofile', 10, 2 );
fuxia
źródło
wygląda na to, że jest błąd .. bbpress.trac.wordpress.org/ticket/1647 patrząc na to .. użyję domyślnego folderu językowego wp-content / languages ​​/ więc jaka jest twoja sugestia dla 'PEŁNA_PATH_TO_YOUR_FILE'?
Ünsal Korkmaz
Ścieżka do katalogu języka ( WP_LANG_DIR) plus plik mo.
fuxia
1
Dobra odpowiedź. Uwaga dla programistów wtyczek: load_plugin_textdomain()wykonuj połączenia podczas akcji „init”, w przeciwnym razie nie będziemy mogli podłączyć się do filtra „load_textdomain_mofile”. Już wtedy będzie za późno.
Geert
2

Musisz stworzyć prostą wtyczkę, która będzie zarządzać tekstem_domena zainstalowanych wtyczek. Jeśli nie chcesz mieć globalnego rozwiązania, możesz dodać kod do pliku functions.php w swoim motywie.

Chodzi o to, aby poinstruować wordpress, gdzie znaleźć tłumaczenia. Wewnętrznie we wszystkich wtyczkach odbywa się to za pomocą czegoś podobnego do

load_plugin_textdomain( 'regenerate-thumbnails', false, '/regenerate-thumbnails/localization' );

z tej funkcji będziesz korzystać. Jak widać tutaj , ostatni argument służy do ustawienia względnej ścieżki wtyczki, w której znajdują się pliki tłumaczeń.

Możesz zrobić, co chcesz, umieszczając jeden wiersz dla każdej wtyczki, którą chcesz zmienić folder języków w następujący sposób.

load_plugin_textdomain('bbpress', false, '../../languages/bbpress');

poinstruuje to wordpress, aby załadował niestandardowe pliki tłumaczeń z folderu obok pluginsfolderu, który ma folder o nazwie bbpresszawierającej pliki tłumaczeń przy użyciu DOKŁADNEGO nazewnictwa używanego przez każdą wtyczkę.

Twoja metoda, która instruuje domeny tekstowe dla wszystkich wtyczek, powinna działać w tej initfazie w następujący sposób

function set_myplugins_languages() {
     .... your code here.....
}
add_action('init', 'set_myplugins_languages');

(Nie zapomnij zaznaczyć tej odpowiedzi jako przydatnej)

Odys
źródło
0

Aby to zadziałało, musisz mieć już pliki tłumaczeń WordPress w WP_LANG_DIR i mieć globalne ustawienia regionalne ustawione na ten język. Jeśli dołączasz tylko tłumaczenia dla bbPress bez zmiany ustawień regionalnych lub obecności podstawowych plików tłumaczeń WordPress, nic nie zostanie przetłumaczone, mimo że je załadujesz.

Jeśli chcesz zastąpić ustawienia regionalne samego bbPress, musisz dodać filtr do 'bbpress_locale', który pozwala na przesłonięcie pliku mo bbPress.

Chociaż prawdą jest, że bbPress 2.0 korzysta z funkcji load_textdomain (), load_plugin_textdomain () jest po prostu opakowaniem dla load_textdomain (). Metoda bbPress 2.0 jest bardziej niezawodna i umożliwia globalne umieszczanie plików tłumaczeń, dzięki czemu nie tracisz ich podczas aktualizacji wtyczki.

John James Jacoby
źródło
-1

W moim przypadku utworzenie stałego niestandardowego tłumaczenia wtyczki wymaga następujących kroków (przykłady tłumaczenia wtyczki ACF):

  1. utwórz wp-content/languages/plugins/katalog
  2. skopiuj wybrany plik tłumaczenia .poz lang/folderu wtyczki (lub dowolnego innego z tłumaczeniem) do utworzonego wp-content/languages/plugins/(np. z lang/acf-pl_PL.podo wp-content/languages/plugins/acf-pl_PL.po)
  3. dostosuj tłumaczenie za pomocą np. Poedit lub dowolnego innego programu do edycji .poplików, a następnie wygeneruj .moi zapisz w wp-content/languages/plugins/(np. wp-content/languages/plugins/acf-pl_PL.mo)

W ten sposób tłumaczenie powinno zostać zachowane nawet po aktualizacji wtyczki.

Nie jestem pewien, czy ta strategia będzie działać dla wszystkich wtyczek, ale zdecydowanie warto spróbować.

jmarceli
źródło