我正在开发Kohana 3的管理应用程序,我显然正在使用很多表单。
应用程序需要多语言,我对如何管理我的消息文件以及如何访问它们感到非常困惑。
i18n是否支持语言文件夹中的不同文件夹和文件?
E.g:
或者它是否支持语言文件中的数组?
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 :(得分: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并且效果很好。
答案 1 :(得分:1)
仅使用编写应用程序语言的message files开始。
讯息/ 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 /视图/认证/ 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');
当然手动设置语言并不是很有用。它可以使用:
设置答案 2 :(得分: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',
这会阻止您在消息文件中使用__()函数,因为它不允许进行缓存。