Php Kohana 3中的i18n和错误消息

Php Kohana 3中的i18n和错误消息,php,internationalization,kohana,messages,Php,Internationalization,Kohana,Messages,我正在用Kohana3开发一个管理应用程序,显然我正在使用很多表单 应用程序需要是多语言的,我对如何管理我的消息文件,尤其是如何访问它们感到非常困惑 i18n是否支持语言文件夹中的不同文件夹和文件 例如: i18n 嗯 形式 fr 形式 或者它支持语言文件中的数组 i18n/fr.php <?php defined('SYSPATH') or die('No direct script access.'); return array ( 'common_form'

我正在用Kohana3开发一个管理应用程序,显然我正在使用很多表单

应用程序需要是多语言的,我对如何管理我的消息文件,尤其是如何访问它们感到非常困惑

i18n是否支持语言文件夹中的不同文件夹和文件

例如:

  • i18n
      • 形式
    • fr
      • 形式
或者它支持语言文件中的数组

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.',
                    )


)
i18n/fr.php
messages/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',
这会阻止您在消息文件中使用_uo()函数,因为不允许使用该函数进行缓存。

仅从使用应用程序编写语言编写的函数开始

  • 开发人员可以只使用消息文件编写应用程序,并担心以后的翻译
  • I18n文件将要翻译的文本放在左侧,将要翻译的文本放在右侧的单个文件中
  • I18n文件可以通过模块(如翻译器后端)进行解析和编辑
messages/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',
    ),
);
<?php

return array(
    'Email' => 'Email',
    'Password' => 'Contraseña',
    'Log On' => 'Acceder',
 );
<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,但我很快就要做了,所以如果您能再等一会儿,我可能会帮助您。如果您找到了解决方案,请将其作为答案张贴在此处。谢谢。谢谢,这很好用,比我计划做的要好得多!在kohana文档中:@xylar同意,这是一个非常古老的答案:)尽管在实践中,你可以通过缓存打破任何东西,所以这个“解决方案”仍然可以在更小的范围内工作
I18n::lang('es');