2010-08-07 3 views
4

Я разрабатываю приложение администрирования с Kohana 3, и я, очевидно, работаю с множеством форм.i18n и сообщения об ошибках в 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)?

спасибо.

+0

Никогда не сделано i18n в Кохана, но я должен в ближайшее время, так что если вы можете подождать немного дольше, я могу быть способный помочь вам. Если вы нашли решение, отправьте его здесь в качестве ответа. Благодарю. – alex

ответ

5

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

+0

Спасибо, это прекрасно работает и намного лучше, чем я планировал! – LBridge

+1

Собирался использовать это, но заметил, что он говорит: «Не используйте __() в ваших файлах сообщений, так как эти файлы могут быть кэшированы и не будут работать должным образом». в документах kohana: http://kohanaframework.org/3.2/guide/kohana/files/messages – xylar

+0

@xylar согласился, это довольно старый ответ :) хотя на практике вы можете сломать что-либо с кешированием, чтобы это «решение» будут по-прежнему работать в меньших масштабах – Kemo

0

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

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

0

Начать только с message files, написанной на языке приложение написано в.

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

После того как все сообщения устанавливаются добавить translations:

i18n/es.php

<?php 

return array(
    'Email' => 'Email', 
    'Password' => 'Contraseña', 
    'Log On' => 'Acceder', 
); 

При вызове Kohana::message() оберните его в __() так, что если язык установлен он будет пытаться использовать переведенный сообщение:

AppPath/Views/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'); 

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

  • выпадающий список окно
  • язык браузера
Смежные вопросы