Підтримка I18n
Усі вихідні рядки повинні бути пов'язані з відповідним текстовим доменом, щоб дозволити інтернаціоналізацію зацікавленими сторонами, навіть якщо розробник не зацікавлений у перекладі власного плагіна.
Зауважте, що дуже важливо завантажити мовні файли під час init
дії, щоб користувач міг підключитися до дії.
Дивіться Codex: I18n для розробників WordPress
А також ця стаття: Правильно завантажуйте файли мови WP .
Оскільки WordPress 4.6+
WP 4.6 змінив порядок завантаження та перевірені місця, це значно спростило розробників та користувачів.
Розглядаючи плагін із текстовим доменом "мій плагін", WordPress ПЕРШИЙ шукатиме файл перекладу у:
/wp-content/languages/plugins/my-plugin-en_US.mo
Якщо він не знайде його там, він шукатиме той, де плагін повідомляє його шукати (як правило, у папці "мова" плагінів, якщо слідує за кодексом):
/ wp-content / plugins / my-plugin / languages / my- plugin-en_US.mo
Нарешті, якщо не знайдено жодного мовного файлу, він перевірить розташування за замовчуванням:
/wp-content/languages/my-plugin-en_US.mo
Перша перевірка була додана в 4.6 і надає користувачам певне місце для додавання мовного файлу, так як раніше вони повинні були знати, де розробник додав мовний файл, тепер користувач просто повинен знати textdomain плагіна:
/ wp-content / мови / плагіни / TEXTDOMAIN-LOCAL.mo
Нижче наведено старий спосіб (Не актуально з WP 4.6+)
[...]
Нарешті, я хотів би зазначити, що важливо завантажити власні файли мови користувача з WP_LANG_DIR, перш ніж завантажувати мовні файли, які постачаються разом із плагіном . Коли кілька мо-файлів завантажуються для одного домену, буде використаний перший знайдений переклад. Таким чином мовні файли, надані плагіном, служать резервним рядком для рядків, не переведених користувачем.
public function load_plugin_textdomain()
{
$domain = 'my-plugin';
// The "plugin_locale" filter is also used in load_plugin_textdomain()
$locale = apply_filters( 'plugin_locale', get_locale(), $domain );
load_textdomain(
$domain,
WP_LANG_DIR . '/my-plugin/' . $domain . '-' . $locale . '.mo'
);
load_plugin_textdomain(
$domain,
FALSE,
dirname( plugin_basename(__FILE__) ) . '/languages/'
);
}