i18n и сообщения об ошибках в Kohana 3

Я разрабатываю приложение администрирования с Kohana 3, и я, очевидно, работаю с множеством форм.

Приложение должно быть многоязычным, и я очень смущен тем, как управлять файлами сообщений и особенно тем, как обращаться к ним.

Поддерживает ли i18n различные папки и файлы внутри языковой папки?

Например:

  • 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', 

Это не позволяет использовать функцию __ () внутри файлов сообщений, поскольку для кеширования это запрещено.

Начните только с файлов сообщений, написанных на языке, на котором написано приложение.

  • Разработчик может написать приложение, используя только файлы сообщений, и беспокоиться о переводах позже.
  • Файлы I18n имеют текст для перевода слева и переводы справа в одном файле.
  • Файлы I18n можно анализировать и редактировать такими модулями, как бэкэнды для переводчиков.

Сообщения / 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'); 

Конечно, установка языка вручную не очень полезна. Его можно установить, используя:

  • раскрывающийся список
  • язык браузера