Wsparcie » Wtyczki » Tłumaczenie wtyczki pod unix-em

  • Rozwiązany Piotr Po

    (@potreb)


    Witam. Mam dziwną sytuację. Napisałem sobie już plugin, tylko mam jeden problem. Na Windowsie działa mi tłumaczenie, a jak przeniosłem na unixa to już nie. Mój kod index-a wygląda mniej więcej tak:

    define('WPR_PATH', dirname( __FILE__ ) );
    define('WPR_DIRECTORY', plugin_basename( WPR_PATH ) );
    define('WPR_URL', plugin_dir_url( __FILE__ ) );
    
    load_plugin_textdomain('wpr', FALSE, WPR_DIRECTORY . "/language/" );
    
    register_activation_hook( __FILE__, array( 'WP_Register_Admin', 'activate') );
    register_deactivation_hook( __FILE__, array( 'WP_Register_Admin', 'deactivate') );
    register_uninstall_hook( __FILE__, array( 'WP_Register_Admin', 'uninstall') );
    
    if( ! class_exists( 'WP_List_Table' ) ) {
    	require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
    }
    
    if( ! class_exists( 'WP_Register_Table' ) ) {
    	require_once( WPR_PATH . '/application/table.php' );
    }
    
    require_once( 'application/login.php' );
    WP_Register_Login::init();
    
    if(is_admin() && (!defined('DOING_AJAX' ) || !DOING_AJAX)) {
    	require_once( WPR_PATH . '/application/admin.php' );
    	WP_Register_Admin::init();
    }

    Nie wiem naprawdę w czym błąd i dosyć trudno mi ustalić czemu tłumaczenie się nie ładuje.

    Tutaj udostępniam wtyczkę do pobrania, testowania i modyfikowania

Viewing 12 replies - 1 through 12 (of 12 total)
  • Zacząłbym od sprawdzenia, co zwraca funkcja plugin_basename 😉 Bo coś mam wrażenie, że zwraca troszkę co innego, niż byś chciał.

    (tutaj masz przykład, który wszystko powinien wyjaśnić: http://codex.wordpress.org/Function_Reference/plugin_basename)

    Poza tym powodów pewnie może być wiele. Sprawdź przede wszystkim, czy:
    a) plik istnieje,
    b) czy ścieżka WPR_DIRECTORY . "/language/" oblicza się prawidłowo,
    c) czy skrypt ma dostęp do tego pliku.

    PS. Nie nazywałbym głównego pliku wtyczki index.php Przyjęło się chyba, że ten plik ma raczej jakąś nazwę pochodną od nazwy wtyczki (najlepiej taką samą, jak nazwa katalogu).

    Cześć, dzięki za odpowiedź.

    Funkcja plugin_basename zwraca po prostu samą nazwę katalogu: wp-register
    Ścieżka tłumaczenia wygląda tak: wp-register/language/

    Skrypt ma dostęp do plików tłumaczenia.

    Zmieniłem nazwę, pomyślałem, może to przez nazwanie jako index, nic z tego. Dalej nie działa.

    To używasz chyba trochę innej funkcji plugin_basename niż ja i niż zna WordPress 😉

    Za Codexem:
    <blockqoute>”Gets the basename of a plugin (extracts the name of a plugin from its filename).”</blockqoute>

    i przykład:

    <blockqoute>If your plugin file is located at /home/www/wp-content/plugins/myplugin/myplugin.php, and you call:

    $x = plugin_basename(__FILE__);
    $x will equal „myplugin/myplugin.php”.
    </blockqoute>

    A tu link do dokumentacji tej funkcji (jeszcze raz, bo poprzednio chyba nie zadałeś sobie jednak trudu, żeby tam zajrzeć…)
    http://codex.wordpress.org/Function_Reference/plugin_basename

    Skoro nie znasz funkcji plugin_basename to szkoda. WordPress na pewno zna 😉

    Zastosowanie z innych pluginów jest takie samo jak moje.

    load_plugin_textdomain( 'better-wp-security', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
    load_plugin_textdomain('polylang', false, basename(POLYLANG_DIR).'/languages');

    Więc tutaj ścieżki są prawidłowe. Codex to nie wyrocznia, bo wiele informacji jest błędnych. Także, nie wiem dlaczego dalej nie ładuje plików tłumaczenia. Wszystkie możliwości już sprawdzałem, oprócz kalsy prztewarzającej pliki MO.

    Piotrze, kliknij proszę w link, który Ci podaję i przestań zgrywać cwaniaka.

    Zwróć uwagę, że
    – polylang używa basename(POLYLANG_DIR)...
    – better-wp-security używa dirname( plugin_basename( __FILE__ ) )

    a Ty radośnie używasz:
    plugin_basename( WPR_PATH )

    Jeśli Twoim zdaniem nie ma różnicy między dirname(plugin_basename(...)), basename(...) i Twoim plugin_basename(...), to chyba dalsza część tej dyskusji nie ma sensu…

    PS. Tylko po cholerę marnujesz czas pomagających, jeśli nawet nie raczysz przeczytać odpowiedzi, których ktoś udziela na Twoje pytanie (ani zajrzeć do dokumentacji funkcji, z których chcesz korzystać…)?

    Kliknąłem w link i robiłem wszystkie możliwe testy. Przejrzyj sobie jeszcze to co poniżej.

    Zrobiłem printa mojego zastosowania i nie widzę błędu.

    dirname( plugin_basename( __FILE__ ) ): wp-register
    WPR_DIRECTORY: wp-register

    Zwraca to samo.

    A za codex-em:

    Or if you’d like to put language files in a sub folder.
    load_plugin_textdomain( 'my-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );

    No dobrze, żeby ciebie zapewnić, że robię wszystko dobrze zmieniłem moją beznadziejną stałą:

    define('WPR_PATH', dirname( __FILE__ ) );
    define('WPR_DIRECTORY', dirname( plugin_basename( __FILE__ ) ) );
    define('WPR_URL', plugin_dir_url( __FILE__ ) );
    
    load_plugin_textdomain( 'wpr', false, WPR_DIRECTORY . '/languages/' );

    I dalej nic. Nie znajduje tłumaczenia. A tak też nie działa:

    load_plugin_textdomain( 'wpr', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );

    Dobra, czy możesz teraz podesłać zmodyfikowaną wersję całości – tę, którą masz obecnie – z wyprostowaną sprawą pomieszania plugin_basename/basename/dirname?

    PS. Wcześniej nie robiłeś dobrze, bo wołanie plugin_basename, bez dirname (a tak miałeś) zwracało ścieżkę do pliku łącznie z nazwą pliku – i taką wersję udostępniłeś powyżej 😉

    Zrobiłem var_dump-a funkcji:

    $load_lang = load_plugin_textdomain( 'wpr', false, WPR_DIRECTORY . '/languages/' );

    Co ciekawe pod unixem zwraca false, a po windowsem zwraca true. Dziwne zachowanie.

    Tutaj pliki: Nowa i stara wersja wtyczki.

    A w gwoli wyjaśnień. Poprzednio robiłem dobrze. Jak nie jesteś pewny sprawdź sobie poprzednią wersję 🙂

    To teraz wyjaśnienie idiotycznego błędu. Oczywiście ja zawiniłem. W kodzie było wszystko okey, tylko plik lang był źle nazwany. Bo podstawowa różnica między unixem a windowsem jest taka że unix rozpoznaje wielkość liter, a windows nie. Więc litera L i l mała różnicą, a tyle wkurzenia. Dzięki Krzysiek za poświęcony i zmarnowany czas.

    Ehh, na to też nie zwróciłem uwagi…

    To jeszcze jak byś mógł oznaczyć temat jako rozwiązany, to by było super.

    PS. Aczkolwiek z tymi ścieżkami to też miałeś błąd 😛

    Możliwe, że miałem, ważne że już działa. Jak na pierwszą wtyczką do wordpress-a to nie jest aż tak źle, przynajmniej wtyczka się przydała, bo już hakierzy próbowali logować się do wp, a było mi potrzebne rejestrowanie zdarzeń w systemie.

    🙂

Viewing 12 replies - 1 through 12 (of 12 total)
  • The topic ‘Tłumaczenie wtyczki pod unix-em’ is closed to new replies.