i18n и сообщения об ошибках в Кохана 3 - PullRequest
4 голосов
/ 07 августа 2010

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

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

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

Например:

  • i18n
    • ru
      • форма
    • фр
      • форма

Или делает этоподдержка массивов в языковом файле?

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 классом)?

Спасибо.

Ответы [ 3 ]

5 голосов
/ 11 августа 2010

Сообщения / 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, и она хорошо работает.

1 голос
/ 30 мая 2014

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

  • Разработчик может написать приложение, используя только файлы сообщений, и позаботиться о переводе позже.
  • Файлы 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');

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

  • выпадающий список
  • язык браузера
0 голосов
/ 14 февраля 2014

Нет хорошей документации о том, как переводить сообщения.Класс 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',

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

...