2010-08-07 57 views
4

我正在用Kohana 3開發一個管理應用程序,我顯然正在處理很多表單。Kohana 3中的i18n和錯誤消息3

該應用程序需要是多語言的,我對如何管理我的消息文件,尤其是如何訪問它們感到非常困惑。

i18n是否支持語言文件夾內的不同文件夾和文件?

E.g:

  • 國際化
    • 連接
      • 形式
    • 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.', 
        ) 


) 

如果你能做到這一點,當你翻譯消息時你將如何訪問這些字段/文件?

我不明白的另一件事是我怎樣才能以某種方式將我的翻譯鏈接到生活在messages文件夾中的錯誤消息。

這真讓我困惑。另外,你如何處理沒有字段的錯誤(錯誤沒有被Validate類檢查)?

謝謝。

+0

在Kohana中從來沒有做過國際化,但我得很快,所以如果你能等待的時間長一點,我可能是能夠幫助你。如果您找到了解決方案,請在此處將其作爲答案發布。謝謝。 – alex 2010-08-10 01:19:30

回答

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

等(你定義爲許多規則如你所願)。

至少這是我的做法,第一次使用國際化和它運作良好。

+0

謝謝你,這工作正常,比我打算做的更好! – LBridge 2010-08-11 04:41:31

+1

打算使用這個,但注意到它說:「不要在你的消息文件中使用__(),因爲這些文件可能被緩存,並且不能正常工作。」在kohana文檔中:http://kohanaframework.org/3.2/guide/kohana/files/messages – xylar 2012-05-09 14:53:53

+0

@xylar同意,這是一個相當老的答案:)雖然在實踐中,你可以打破任何緩存,所以這個'解決方案'仍然會在較小的範圍內工作 – Kemo 2012-05-10 10:16:02

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()將它包裹在0123中這樣,如果語言設置它會嘗試使用翻譯的消息:

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'); 

當然手動設置語言不是很有用。它可以通過設置:

  • 一個下拉框
  • 瀏覽器語言