Celem jest zaoferowanie przycisku / menu rozwijanego lub podobnego do przełączania języka interfejsu publicznego 1) w locie.
Czego szukam
- Wtyczka lub kod motywu ...
- ... lub Pomysły
load_textdomain()
Docenione byłoby obejście problemu z pozostawieniem tłumaczenia do plików .po / .mo- Pomysły, jak parsować ciągi znaków w interfejsie (np. Pliki ajax / plain php / ini, json, xml), gdy nie polegasz na niektórych funkcjach textdomain
Uwaga:
1) Nie chodzi o publikowanie w różnych językach.
2) Nie potrzebuję kodu, aby zrobić rzeczywistą listę rozwijaną / przycisk / cokolwiek innego. Dotyczy tylko kodu / systemu dostarczającego ciągi dla interfejsu użytkownika.
Dzięki!
multi-language
translation
language
kajzer
źródło
źródło
WPLANG
opcją może być ponowne zdefiniowanie stałej. Robię to na dwóch stronach z treściami wielojęzycznymi, gdzie wtyczka wielojęzyczności nie uruchamia tłumaczenia interfejsu użytkownika. Gdyby to miało być rozwiązanie AJAX / JSON, nie wiedziałbym, jak pomóc.Odpowiedzi:
Zdecydowanie najlepszym (najprostszym) sposobem jest użycie filtru ustawień regionalnych (wewnątrz
get_locale()
).Najpierw skonfiguruj szybką funkcję wyszukiwania innego języka do użycia w
locale
filtrze.Zostawiłem to jako funkcję globalną, może się przydać ...? Resztę wtyczki zapakowałem do klasy.
Tworzy listę możliwych języków, z których możesz wybierać.
Wady
wp-content/languages
pliki formularzaxx_xx.mo
. Jeśli nie ma takiej postaci (nie wszystkie pliki .mo są), wtyczka nie będzie go odbierać!$locale
robi coś innego niż język? Jeśli tak, nadal można uzyskać takie same ustawienia regionalne, ale podać alternatywne tłumaczenia. Jest jednak znacznie bardziej bałagan ...Kod
źródło
'wp-admin/includes/ms.php'
powoduje wyświetlenie powiadomienia administratora o aktualizacji witryn sieciowych (gdy jesteś jedną witryną!). Może byćformat_code_lang()
konieczne skopiowanie go w ramach funkcji niestandardowej.Jeśli możesz zadowolić się odświeżeniem strony,
WPLANG
opcją może być ponowne zdefiniowanie stałej. Robię to na dwóch stronach z treściami wielojęzycznymi, gdzie wtyczka wielojęzyczności nie uruchamia tłumaczenia interfejsu użytkownika.źródło
http://example.com/language/whatever/
, prawda?$_SESSION
zmiennej wyzwalającej przedefiniowanieWPLANG
przy następnym ładowaniu strony. Jeśli chcesz powielić to na stronie wielojęzycznej, zwróć uwagę, że jak mówi komentarz do pastebin, kod w nim działa z WPML, ostatnią darmową wersją. Nie można go replikować 1 do 1 za pomocą qTranslate, ponieważ te identyfikatory URI nie są fizyczne, ale przepisywane za pośrednictwemmod_rewrite
modułu apache. Jestem pewien, że można to zmienić, ale nie będzie działać „tak jak jest”.$_SESSION
) Mój problem polega na tym, że afaik jest dość trudny w obsłudze, a rzeczy między globalsami a tablicą mogą łatwo się pomieszać. Tak więc, jeśli spróbuję znaleźć sposób na zmianęWPLANG
, to muszę znaleźć solidny sposób na przekazanie jej z jednej prośby do drugiej. Możeadd_query_arg/get_query_var
http://www.qianqin.de/qtranslate/
jest to czego potrzebujesz ...
Edytuj I - po komentarzu. Po pierwsze - dziękuję wszystkim, którzy wnieśli swój wkład w torrent downvotes. (tak się dzieje, gdy nie odwiedza się wystarczająco często: -))
teraz - funkcja obsługująca przełącznik znajduje się w rdzeniu qtranslate. (zaczyna się mniej więcej od linii 80 - zależy od wybranej wersji).
Ponieważ nie możesz zajrzeć do kodu NOT OOP, a teraz nie mam już nic innego do roboty - syntezowanie zajęło 10 minut, parafrazując skompiluj ten non-OOp z jeszcze innym kodem innym niż OOP.
(przepraszam, - prymitywny stary skool tutaj)
Zakładając, że rozumiem pytanie i& Zakładając, że chcesz, aby kod był dla administratora i&, zakładając, że będziesz wiedział, jak przenieść go do interfejsu, jeśli chcesz i&, zakładając, że rozumiesz, że kod nie jest optymalny:
UWAGI:
1 - Zbudowano go w 10 minut. na lokalnej maszynie podczas pobytu na lotnisku. Powodem, dla którego to mówię, jest to, że jedyna dostępna instalacja Wordpress, którą mam tutaj, jest dość stara. (Myślę, że 2.9).
Oznacza to, że prawdopodobnie menu języka pojawi się pod kontekstowym div pomocy, ponieważ ostatnio wprowadzono nową strukturę div (z zakładkami) - ale nadal powinna działać. (Obiecuję, że wrócę do tego później, jeśli będę miał czas)
Gdybym miał więcej czasu (i nowy kod Wordpress tutaj), prawdopodobnie zintegrowałbym to z nowym paskiem administracyjnym z
add_action( 'admin_bar_menu', 'k99_add_language_menu_2', 1000 );
(już obiecałem wrócić do tego)2 - powinieneś mieć wymienione pliki językowe w folderze „languages” w wp-content (lepiej ??) lub wp-include. jeśli chodzi o ten punkt - kod jest tylko dowodem koncepcji - i oczywiście, jeśli ktoś ma więcej czasu, menu powinno być budowane w sposób dynamiczny, a nie jak tutaj.
3 - Twój WPLANG w konfiguracji powinien być pusty. Nie jestem pewien, czy będzie działać na nowszych wersjach wp, jeśli język jest już ustawiony.
4 - jest to prosty zsyntetyzowany i sparafrazowany dowód koncepcji oparty na tym, co widzieliśmy w kodzie qtranslate (także w starej wersji) - więc większość rzeczy jest wykonywana w „szybki” sposób, niekoniecznie w „właściwy” sposób (jak dodanie JS , brak dedykowanej domeny tekstowej itp.).
EDYCJA II
dzisiaj ktoś ma szczęście! (Opóźnienie lotu )
Ponieważ szukałeś „pomysłów” na podejścia, oto kolejny znany.
Nie zmieści się we wtyczce ani w żadnym innym niewyłącznym środowisku, ale może dać ci inny kierunek, jak radzić sobie z „przeglądarkami”.
Umożliwi to zdobycie języka z GET, takim jak:
<a href="index.php?lang=de">German</a>
lub<a href="whatever.php?lang=ml">my Language</a>
Aby użyć, możesz utworzyć kod (nazwijmy go wp-langswitch.php)
teraz w wp-config, tuż przed stałą WPLANG, musimy dołączyć nasz kod.
Teraz - oczywiście lepiej byłoby dodać kilka ciasteczek do miksu, aby przechowywać języki.
EDYCJA III
Obiecałem, że wrócę do tego później - oto jak (w bardzo niepoprawny i prymitywny sposób) można go zintegrować z paskiem administratora (zamiast menu pomocy kontekstowej)
Po prostu zastąp tę funkcję (lub dodaj) do starego kodu (oryginalna wtyczka NON - OOP).
Tak jak powiedziałem, nie mam tutaj nowej instalacji wordpress na lokalnym, która zawiera pasek administratora - ale powinien działać.
(a potem znowu może nie działać ... ale jestem pewien, że możesz to naprawić, jeśli naprawdę chcesz - nawet myślałem, że to nie jest OOP) :-)
muszę teraz biec. mam nadzieję, że to jakoś pomaga.
EDYCJA IV - zmieniono edycję III na działającą wersję dla paska menu administratora (przynajmniej na moim wp 3.4)
ponieważ nie miałem działającej instalacji 3.4 - a teraz wróciłem i tak zrobiłem - edytowałem rozwiązanie Edit III - i działa dla mnie.
Jeśli chodzi o głosy poparcia, nie obchodzi mnie to mniej. I nie potrzebuję żadnych „nagród” (cokolwiek by to było…) To tylko ze względu na ćwiczenie, które powinieneś być w stanie przekazać autorowi qTranslate. :-) pomimo tego, że nie jest to OOP - jest to genialna wtyczka, z której można się wiele nauczyć w wielu obszarach. biorąc pod uwagę „kiedy” tego wydania wtyczki, jest to nawet niesamowite. warte nieopisanego wysiłku odczytania kodu NON OOP - nawet jeśli nie jest - OOP. I nawet jeśli nie jest poprawnie wcięte (dobry Boże!).
źródło
require()
. Nie możesz użyćdefine()
tego samego ciągu dwa razy. Edycja III ma pewne problemy z językami. Wybóren_US
nie zrobiłby nic (?), Alede_DE
ustawiłby naEnglish
;). Podsumowując: przyznam nagrody i rozdaję je (na przykład StephenHarris) za kompletną i działającą odpowiedź. Jeśli masz coś takiego, zaktualizuj swoją odpowiedź (ciekawe podejście do plików cookie), a ja mogę dodać i wynagrodzić nagrodę.