CakePHP Версия: 3.6.6
Я заранее прошу прощения за такой длинный пост, но я верю, что это вся информация, необходимая для того, чтобы кто-то мог помочь.
============================================ ===============================
РАЗДЕЛ 1
// ЧТО Я НРАВИТСЯ, ЧТОБЫ ДОСТИГАТЬ
В конечном счете, я бы хотел, чтобы мое приложение автоматически определяло язык пользователя и соответственно изменяло следующее:
- Текст.
- Формат даты.
- Числовой формат.
- Валюта.
В попытке реализовать это я начал с упрощения, не пытаясь автоматически определять язык пользователя, а вручную изменяя локаль в config / app.php.
============================================ ===============================
РАЗДЕЛ 2
// ИНФОРМАЦИЯ, КОТОРУЮ Я БЫЛ УКАЗАН
Интернационализация и локализация - Здесь
Оболочка I18N - Здесь
============================================ ===============================
РАЗДЕЛ 3
// ЧТО Я ПЕРЕД НАЧАЛОМ
config / app.php
'defaultLocale' => env ('APP_DEFAULT_LOCALE', 'en_GB'),
config / bootstrap.php
ini_set ('intl.default_locale', Configure :: read ('App.defaultLocale'));
// Приветственный контроллер
?php
namespace App\Controller;
use App\Controller\AppController;
use Cake\Event\Event;
// For translation
use Cake\I18n\I18n;
use Cake\I18n\Time;
use Cake\I18n\Number;
class WelcomeController extends AppController
{
public function index()
{
// Get the default locale
$defaultLocale = I18n::getDefaultLocale();
echo $defaultLocale . '<br />';
// Date
$date = new Time('2017-12-05 23:00:00');
echo $date . '<br />';
// Number
echo Number::format(123.50) . '<br />';
// Currency
echo Number::currency(1250.00) . '<br /><br />';
}
}
// index.ctp
<?= __('Welcome') ?>
<br />
<?= __('What would you like to do today!') ?>
// Это то, что отображает браузер
en_GB
05/12/2017, 23:00
123.5
£1,250.00
Welcome
What would you like to do today!
============================================ ===============================
РАЗДЕЛ 4
// ЧТО Я СДЕЛАЛ
1. Создана папка в src с именем Locale
2. Создал в Locale папку с именем de_DE
3. Переместился в корзину с кли.
4. Набрал торт i18n экстракт и нажал ввод.
5. После нажатия на кнопку введите следующее:
Текущие пути: нет
Какой путь вы хотели бы извлечь?
[Q] Uit [D] один
[C: xampp \ htdocs \ app_name \ src]>
Затем я добавляю следующее после> и нажимаю ввод
C: XAMPP \ HTDOCS \ app_name \ SRC \ Template \ Добро пожаловать
6. После нажатия клавиши введите следующее:
Текущие пути: C: xampp \ htdocs \ app_name \ src \ Template \ Welcome
Какой путь вы хотели бы извлечь?
[Q] Uit [D] один
[D]>
7. Затем я нажимаю Enter, и клиент отображает следующее:
Хотите извлечь сообщения из ядра CakePHP? (да / нет)
[n]>
8. Затем я нажимаю Enter, и клиент отображает следующее:
Какой путь вы хотите вывести?
[Q] UIT
[C: xampp \ htdocs \ app_name \ src \ Template \ Welcome \ Locale]>
Затем я добавляю следующее после> и нажимаю ввод
C: xampp \ htdocs \ app_name \ src \ Locale
9. Затем я нажимаю Enter, и клиент отображает следующее:
Хотите ли вы объединить все строки домена в файл default.pot? (да / нет)
[n]>
10. Затем я нажимаю кнопку ввода, и клиент отображает следующее:
Извлечение ...
Пути: C: xampp \ htdocs \ app_name \ src \ Template \ Welcome
Выходной каталог: C: xampp \ htdocs \ app_name \ src \ Locale \
================================================== ==================> 100%
Готово.
11. После этого у меня есть файл default.pot в папке src / Locale. Я копирую и вставляю этот файл в папку de_DE.
Содержимое этой папки указано ниже:
# LANGUAGE translation of CakePHP Application
# Copyright YEAR NAME <EMAIL@ADDRESS>
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"POT-Creation-Date: 2018-09-05 09:20+0000\n"
"PO-Revision-Date: YYYY-mm-DD HH:MM+ZZZZ\n"
"Last-Translator: NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <EMAIL@ADDRESS>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
#: Template/Welcome/index.ctp:52
msgid "Welcome"
msgstr ""
#: Template/Welcome/index.ctp:58
msgid "What would you like to do today!"
msgstr ""
Затем я добавляю следующее в 2 msgstr, чтобы они выглядели так:
#: Template/Welcome/index.ctp:52
msgid "Welcome"
msgstr "abc"
#: Template/Welcome/index.ctp:58
msgid "What would you like to do today!"
msgstr "xyz"
Затем я изменяю язык по умолчанию в config / app.php на:
'defaultLocale' => env ('APP_DEFAULT_LOCALE', 'de_DE'),
Затем я обновляю браузер, и отображается следующее:
de_DE
05.12.15, 23:00
123,5
1.250,00 €
Welcome
What would you like to do today!
============================================ ===============================
РАЗДЕЛ 5
// РЕЗУЛЬТАТ
Язык, дата, номер и валюта изменились, но НЕ текст. Он по-прежнему отображает:
Welcome
What would you like to do today!
И я ожидал, что это покажет:
abc
xyz
============================================ ===============================
РАЗДЕЛ 6
// ЧТО Я ПОПЫТАЛ, ЧТОБЫ ИСПРАВИТЬ ЕГО
Я добавил ниже в промежуточное ПО - Application.php:
// Add middleware and set the valid locales
$middlewareQueue->add(new LocaleSelectorMiddleware(['en_GB', 'de_DE']));
А вот что отобразил браузер:
de_DE
05/12/2015, 23:00
123.5
£1,250.00
Welcome
What would you like to do today!
Язык по-прежнему de_DE, но дата, число и валюта вернулись обратно на английский?
============================================ ===============================
РАЗДЕЛ 7
// РЕЗЮМЕ
Я был бы очень признателен за любую помощь в этом, потому что было бы замечательно, если бы я мог локализовать свое приложение и иметь функциональность, позволяющую пользователю использовать мое приложение на своем родном языке. Я действительно ограничиваю свой рынок, если я не могу заставить это работать.
Если есть что-то еще, что я не написал, но вам нужно, пожалуйста, не стесняйтесь, дайте мне знать.
Большое спасибо заранее за любую помощь. Z.
============================================ ===============================
@ ndm - Спасибо за ответ, уже многому научился, но сигары до сих пор нет.
Я скачал Poedit и открыл его. Затем я нажал «Редактировать перевод» и открыл файл default.pot из папки Locale.
Все выглядит хорошо, и отображается ниже:
Добро пожаловать
Что бы вы хотели сделать сегодня!
Затем я нажимаю «Создать новый перевод» и выбираю немецкий из выпадающего списка, окно делится на 2 половины:
Слева - исходный текст - английский.
Справа - перевод - немецкий.
Я выделяю «Добро пожаловать» и выбираю немецкий эквивалент «Willkommen», который затем заполняется в правом окне. Я делаю то же самое для «Что бы вы хотели сделать сегодня».
В этот момент правое окно заполняется немецкими эквивалентами, поэтому я иду в «Сохранить как» и сохраняю файл в моей папке de_DE в папке src / Locale.
Моя папка de_DE теперь заполнена двумя файлами, как описано ниже:
- de.mo
- de.po
Я открываю файл de.po, содержимое которого подробно описано ниже:
# LANGUAGE translation of CakePHP Application
# Copyright YEAR NAME <EMAIL@ADDRESS>
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"POT-Creation-Date: 2018-09-05 09:41+0000\n"
"PO-Revision-Date: 2018-09-05 14:26+0100\n"
"Language-Team: LANGUAGE <EMAIL@ADDRESS>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.1.1\n"
"Last-Translator: \n"
"Language: de\n"
#: Template/Welcome/index.ctp:52
msgid "Welcome"
msgstr "Willkommen"
#: Template/Welcome/index.ctp:58
msgid "What would you like to do today!"
msgstr "Was würden Sie heute gerne machen!"
Затем я очищаю кеш (tmp / cache / persistent) и обновляю браузер.
Для подтверждения у меня есть ниже в config / app.php
'defaultLocale' => env ('APP_DEFAULT_LOCALE', 'de_DE'),
И я прокомментировал ссылку на промежуточное ПО.
К сожалению, текст до сих пор не переведен?
Это казалось довольно простым процессом, поэтому я удивлен, что он не сработал. Я надеюсь, что вы можете увидеть что-то, что я сделал неправильно в процессе, который я использовал, как описано выше.
Еще раз спасибо, Z.
// ЧТО Я ПОПЫТАЛСЯ, КАК ИСПРАВИТЬ
1. Я попытался изменить определение языка в config / app.php с:
'defaultLocale' => env ('APP_DEFAULT_LOCALE', 'de_DE'),
до
'defaultLocale' => env ('APP_DEFAULT_LOCALE', 'de'),
затем очистил кеш и обновил, но не повезло.
2. Я отменил вышесказанное и попытался изменить определение языка в файле de.po с:
"Язык: от \ n" до de_DE \ n
затем очистил кеш и обновил, но все равно не повезло.