Я разрабатываю приложение администрирования с Kohana 3, и я, очевидно, работаю с множеством форм.
Приложение должно быть многоязычным, и я очень смущен тем, как управлять файлами сообщений и особенно тем, как обращаться к ним.
Поддерживает ли i18n различные папки и файлы внутри языковой папки?
Например:
Или он поддерживает массивы в языковом файле?
i18n/fr.php <?php defined('SYSPATH') or die('No direct script access.'); return array ( 'common_form' => array( 'error_type' => 'Error message in French.', 'error_type_2' => 'Other error message.', ) )
И если вы можете это сделать, как бы вы получили доступ к этим полям / файлам при переводе сообщения?
Еще одна вещь, которую я не понимаю, – как я могу каким-либо образом связать свои переводы с сообщениями об ошибках, которые находятся в папке messages
.
Это меня действительно сбивает с толку. Кроме того, как вы обрабатываете ошибки, у которых нет полей (ошибки, которые не проверяются классом Validate
)?
Спасибо.
Сообщения / validate.php:
return array ( 'upload::not_empty' => __('validate.upload_empty'), );
i18n / файл En.php:
return array ( 'validate.upload_empty' => 'Upload must not be empty', );
i18n / ba.php:
return array ( 'validate.upload_empty' => 'Upload ne moze biti prazan', );
и т. д. (вы определяете столько правил, сколько хотите).
По крайней мере, это моя практика, впервые используя i18n, и она работает хорошо.
Не существует хорошей документации по переводу сообщений. Класс Message ищет полную строку в классе I18n.
Вот пример того, как перевести проверки системы на немецкие сообщения. Внутри любого файла /i18n/de.php добавьте:
':field must contain only letters' => ':field darf nur Buchstaben verwenden', ':field must contain only numbers, letters and dashes' => ':field darf nur Zahlen, Buchstaben und Schrägstriche verwenden', ':field must contain only letters and numbers' => ':field darf nur Zahlen und Buchstaben verwenden', ':field must be a color' => ':field muss eine Farbe sein', ':field must be a credit card number' => ':field muss eine Kreditkartennummer sein', ':field must be a date' => ':field muss ein Datum sein', ':field must be a decimal with :param2 places' => ':field muss eine Dezimalzahl mit :param2 Nachkommastellen', ':field must be a digit' => ':field muss eine Zahl sein', ':field must be an email address' => ':field muss eine Email-Adresse sein', ':field must contain a valid email domain' => ':field muss eine korrekte Email Domain beinhalten', ':field must equal :param2' => ':field muss :param2 sein', ':field must be exactly :param2 characters long' => ':field muss genau :param2 Zeichen lang sein', ':field must be one of the available options' => ':field muss eine der verfügbaren Optionen sein', ':field must be an ip address' => ':field muss eine IP-Addresse sein', ':field must be the same as :param3' => ':field muss das gleiche wie :param3 sein', ':field must be at least :param2 characters long' => ':field muss mindestens :param2 Zeichen lang sein', ':field must not exceed :param2 characters long' => ':field darf nicht länger als :param2 Zeichen lang sein', ':field must not be empty' => ':field darf nicht leer sein', ':field must be numeric' => ':field muss eine Zahl sein', ':field must be a phone number' => ':field muss eine Telefonnummer sein', ':field must be within the range of :param2 to :param3' => ':field muss zwischen :param2 und :param3 sein', ':field does not match the required format' => ':field passt nicht zum geforderten Format', ':field must be a url' => ':field muss eine URL sein',
Это не позволяет использовать функцию __ () внутри файлов сообщений, поскольку для кеширования это запрещено.
Начните только с файлов сообщений, написанных на языке, на котором написано приложение.
Сообщения / forms.php
<?php return array( 'user' => array( 'label' => 'Email', 'title' => 'Enter your email address.', ), 'pass' => array( 'label' => 'Password', 'title' => '8 characters or more', ), 'login' => array( 'label' => 'Log On', ), 'submit' => array( 'label' => 'Submit', ), );
После того, как все сообщения будут установлены, добавьте переводы :
i18n / es.php
<?php return array( 'Email' => 'Email', 'Password' => 'Contraseña', 'Log On' => 'Acceder', );
При вызове Kohana::message()
оберните его в __()
чтобы, если язык установлен, он попытается использовать переведенное сообщение:
AppPath / просмотров / Auth / login.php
<label for="user_field"><?php echo __(Kohana::message('forms', 'user.label')); ?></label> <input type="text" id="user_field" name="user" value="" title="<?php echo __(Kohana::message('forms', 'user.title'); ?>"> <br /> <label for="pass_field"><?php echo __(Kohana::message('forms', 'pass.label')); ?></label> <input type="password" id="pass_field" name="user" value="" title="<?php echo __(Kohana::message('forms', 'pass.title'); ?>">
Чтобы установить язык, используйте I18n::lang()
:
I18n::lang('es');
Конечно, установка языка вручную не очень полезна. Его можно установить, используя: