Цель состоит в том, чтобы предложить кнопку / выбрать раскрывающийся список или аналогичный для переключения общедоступного интерфейса 1) язык на лету.
Что я ищу
- Плагин или код темы ...
- ... или идеи
- Используя работу вокруг с
load_textdomain()
будут оценены , чтобы оставить перевод на .po / .mo файлы - Идеи о том, как анализировать строки в интерфейсе (например, файлы ajax / plain php / ini, json, xml), если не полагаться на какую-либо функцию textdomain
Заметка:
1) Речь не о публикации на разных языках.
2) Мне не нужен код, чтобы сделать реальный раскрывающийся список / кнопку / что угодно. Речь идет только о коде / системе, предоставляющей строки для пользовательского интерфейса.
Благодарность!
WPLANG
константы может быть вариантом. Я делаю это на двух сайтах с многоязычным контентом, где плагин многоязычия не запускает перевод интерфейса. Если бы это было решение AJAX / JSON, я бы не знал, как помочь.Ответы:
Безусловно, лучший (самый простой) способ - использовать фильтр локали (внутри
get_locale()
).Сначала настройте быструю функцию для поиска другого языка для использования в
locale
фильтре.Я оставил это как глобальную функцию, может быть удобно ...? Остальную часть плагина я завернул в класс.
Он создает раскрывающийся список возможных языков, из которых вы можете выбрать.
Недостатки
wp-content/languages
файлы формыxx_xx.mo
. Если он не такой формы (не все файлы .mo), плагин не подхватит его!$locale
что-нибудь кроме языка? Если так, то все еще возможно получить ту же локаль, но предоставить альтернативные переводы. Это намного грязнее, хотя ...Код
источник
'wp-admin/includes/ms.php'
вызывает уведомление администратора для обновления ваших сетевых сайтов (когда вы один сайт!). Может быть,format_code_lang()
это нужно будет дублировать внутри пользовательской функции.Если вы можете согласиться на обновление страницы, переопределение
WPLANG
константы может быть вариантом. Я делаю это на двух сайтах с многоязычным контентом, где плагин многоязычия не запускает перевод интерфейса.источник
http://example.com/language/whatever/
правильные?$_SESSION
переменную для запуска переопределенияWPLANG
при следующей загрузке страницы. Если вы захотите повторить это на многоязычном сайте, обратите внимание, что, как говорится в комментарии со вставкой, код в нем работает с WPML, последней бесплатной версией. Его нельзя реплицировать 1 к 1 с помощью qTranslate, потому что эти URI не являются физическими, а переписываются черезmod_rewrite
модуль apache. Я уверен, что это можно настроить, но не будет работать "как есть".$_SESSION
) Моя проблема в том, что на самом деле они довольно сложны в обращении, и вещи между глобалами и массивом могут быть легко перепутаны. Поэтому, если я попытаюсь найти способ изменитьсяWPLANG
, мне нужно найти надежный способ передать его из одного запроса в другой. Может быть,add_query_arg/get_query_var
добьется цели ...http://www.qianqin.de/qtranslate/
это то, что вам нужно ...
Редактировать я - после комментария. Первое - спасибо всем, кто внес вклад в торренты downvotes. (это то, что происходит, когда человек не посещает достаточно часто: -))
now - Функция, которая обрабатывает коммутатор, находится в qtranslate-core. (начинается со строки 80 более или менее - зависит от версии, которую вы хотите.)
Так как вы не можете заглянуть в код NOT OOP, и теперь мне больше нечего делать - я потратил 10 минут на синтез, перефразировав этот не-OOp с еще одним не-OOP-кодом для вас.
(извините, - примитивная старая школа здесь)
Предполагая, что я понял вопрос && Предполагая, что вы хотите, чтобы код был для администратора &&, предполагая, что вы будете знать, как перенести его в интерфейс, если вы хотите &&, если вы понимаете, что код не оптимален:
ЗАМЕЧАНИЯ:
1 - это было построено за 10 мин. на местной машине, пока в аэропорту. Причина, по которой я говорю это, состоит в том, что единственная готовая установка Wordpress, которая у меня здесь, довольно старая. (2,9 я думаю).
Это означает, что, вероятно, языковое меню появится под контекстной справкой div, из-за того, что недавно была введена новая структура div (с вкладками) - но все же она должна работать. (Я обещаю вернуться к этому позже, если у меня будет время)
Если бы у меня было больше времени (и нового кода WordPress здесь), я бы, вероятно, интегрировал это в новую админ-бар с
add_action( 'admin_bar_menu', 'k99_add_language_menu_2', 1000 );
(я уже обещал вернуться к этому)2 - у вас должны быть файлы перечисленных языков в папке «languages» в wp-content (лучше ??) или wp-include. Что касается этого пункта - код является только доказательством концепции - и, конечно, если у вас есть больше времени, меню должно быть построено динамически, а не как здесь.
3 - ваш WPLANG в конфиге должен быть пустым. Я не уверен, что он будет работать на более новых версиях WP, если язык уже установлен.
4 - это простое обобщенное и перефразированное доказательство концепции, построенное на том, что было замечено в коде qtranslate (также старой версии), - так что большинство вещей выполняется «быстрым», а не обязательно «правильным» способом (например, добавление JS) , нет выделенного текстового домена и т. д.).
РЕДАКТИРОВАТЬ II
кому-то повезло сегодня! (Задержка рейса )
Так как вы искали «идеи» для подходов, вот еще один известный.
Он не будет вписываться в плагин или вообще в любую неисключительную среду, но он может дать вам другое направление, как обращаться с «материалами браузера».
Это позволит получить язык с GET, как:
<a href="index.php?lang=de">German</a>
или<a href="whatever.php?lang=ml">my Language</a>
Чтобы использовать, вы можете создать код (давайте назовем его wp-langswitch.php)
теперь в wp-config, перед константой WPLANG, нам нужно включить наш код.
Теперь - очевидно, что было бы лучше добавить несколько файлов cookie в смесь для хранения языков.
РЕДАКТИРОВАТЬ III
Я обещал вернуться к этому позже - вот как (очень некорректно и примитивно) его можно интегрировать в админ-бар (вместо контекстного меню справки)
Просто замените эту функцию (или добавьте) к старому коду (исходный не плагин NON - OOP).
Как я уже сказал, у меня нет локальной установки WordPress на локальном компьютере с админ-баром, но она должна работать.
(и опять же, это может не сработать ... но я уверен, что вы можете это исправить, если действительно хотите - даже подумал, что это не ООП) :-)
должен бежать сейчас. надеюсь, это поможет как-то.
EDIT IV - изменил редактирование III на рабочую версию панели меню администратора (по крайней мере, на моем wp 3.4)
так как у меня не было рабочей установки 3.4 - и теперь я вернулся, и я возвращаюсь - я отредактировал решение Edit III - и оно работает для меня.
Про упущения мне наплевать. И мне не нужны никакие «щедрости» (какими бы они ни были ...). Только для упражнения вы, возможно, дадите его автору qTranslate. :-) Несмотря на то, что это не ООП - это гениальный плагин, у которого есть чему поучиться во многих областях. учитывая «когда» этого выпуска плагина, это даже удивительно. стоит неописуемых усилий по чтению кода без ООП - даже если это не так - ООП. И даже если это не правильно с отступом (боже мой!).
источник
require()
. Вы не можете использоватьdefine()
одну и ту же строку дважды. Edit III имеет некоторые проблемы с языками. Выборen_US
ничего не сделает (?), Ноde_DE
установит его наEnglish
;). Подводя итог: я присуждаю награды и выдаю их (например, Стивену Харрису) за полный и рабочий ответ. Если вы получили что-то подобное, обновите ваш ответ (интересный подход с использованием cookie), и я могу добавить и наградить вас за вознаграждение.