Zend_Form-I18n.xml 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <sect1 id="zend.form.i18n">
  2. <title> Zend_Form 的国际化 </title>
  3. <para>
  4. 开发者日益需要制作网站内容支持多种语言和地区。Zend_Form 把这样的任务变得简单并利用 <link linkend="zend.translate">Zend_Translate</link> 和 <link linkend="zend.validate">Zend_Validate</link> 来完成。
  5. </para>
  6. <para>
  7. 缺省地,<code>Zend_Form</code> 不支持国际化(I18n)。要打开在 <code>Zend_Form</code> 中的 I18n 功能,需要带适当的适配器实例化一个 <code>Zend_Translate</code> 对象,并把它附加到 <code>Zend_Form</code> 和/或 <code>Zend_Validate</code> 中。参见 <link linkend="zend.translate">Zend_Translate 文档 </link> 有更多关于生成翻译对象和翻译文件的信息。
  8. </para>
  9. <note>
  10. <title> 可以对每个元素关闭翻译 </title>
  11. <para>
  12. 你可以通过调用 <code>setDisableTranslator($flag)</code> 方法或传递 <code>disableTranslator</code> 选项给对象来对任何表单、元素、显示组或子表单关闭翻译。当你想有选择地对独立的元素或一组元素关闭翻译,这个很有用。
  13. </para>
  14. </note>
  15. <sect2 id="zend.form.i18n.initialization">
  16. <title> 在表单中初始化 I18n </title>
  17. <para>
  18. 要在表单中初始化 I18n,你需要或者 <code>Zend_Translate</code> 对象或者 <code>Zend_Translate_Adapter</code> 对象,详细请见 <code>Zend_Translate</code> 文档。一旦你有一个翻译对象,你将有若干选项:
  19. </para>
  20. <itemizedlist>
  21. <listitem>
  22. <para>
  23. <emphasis>Easiest:</emphasis> 添加它到注册表。Zend Framework 中所有 I18n 相关的组件将自动发现一个翻译对象(这个对象在注册表中在 'Zend_Translate' 键之下)并用它翻译和/或本地化:
  24. </para>
  25. <programlisting role="php"><![CDATA[<?php
  26. // use the 'Zend_Translate' key; $translate is a Zend_Translate object:
  27. Zend_Registry::set('Zend_Translate', $translate);
  28. ?>]]></programlisting>
  29. <para>
  30. 这将由 <code>Zend_Form</code>、<code>Zend_Validate</code> 和 <code>Zend_View_Helper_Translate</code> 来获得。
  31. </para>
  32. </listitem>
  33. <listitem>
  34. <para>
  35. 如果你所担心的是翻译校验错误消息,可以用 <code>Zend_Validate_Abstract</code> 来注册翻译对象:
  36. </para>
  37. <programlisting role="php"><![CDATA[<?php
  38. // Tell all validation classes to use a specific translate adapter:
  39. Zend_Validate_Abstract::setDefaultTranslator($translate);
  40. ?>]]></programlisting>
  41. </listitem>
  42. <listitem>
  43. <para>
  44. 另外,你可以(把它)附加到 <code>Zend_Form</code> 对象作为全局翻译器。这个也有翻译校验错误消息的副作用:
  45. </para>
  46. <programlisting role="php"><![CDATA[<?php
  47. // Tell all form classes to use a specific translate adapter, as well as use
  48. // this adapter to translate validation error messages:
  49. Zend_Form::setDefaultTranslator($translate);
  50. ?>]]></programlisting>
  51. </listitem>
  52. <listitem>
  53. <para>
  54. 最后,你可以用 <code>setTranslator()</code> 方法附加一个翻译器到一个特定的表单实例或特定的元素:
  55. </para>
  56. <programlisting role="php"><![CDATA[<?php
  57. // Tell *this* form instance to use a specific translate adapter; it will also
  58. // be used to translate validation error messages for all elements:
  59. $form->setTranslator($translate);
  60. // Tell *this* element to use a specific translate adapter; it will also be used
  61. // to translate validation error messages for this particular element:
  62. $element->setTranslator($translate);
  63. ?>]]></programlisting>
  64. </listitem>
  65. </itemizedlist>
  66. </sect2>
  67. <sect2 id="zend.form.i18n.standard">
  68. <title> 标准 I18n 目标 </title>
  69. <para>
  70. 既然你已经附加了翻译对象,那么到底什么是缺省翻译?
  71. </para>
  72. <itemizedlist>
  73. <listitem>
  74. <para>
  75. <emphasis>Validation error messages.</emphasis> 校验错误消息可以被翻译。使用从 <code>Zend_Validate</code> 校验类来的各种错误代码常数作为消息的 IDs。更多关于这些代码的信息,参见 <link linkend="zend.validate">Zend_Validate</link> 文档。
  76. </para>
  77. <para>
  78. 另外,到 1.6.0 版,你可使用实际的错误消息作为消息识别符来提供翻译。我们倾向在 1.6.0 版及以上使用这个办法,因为我们在将来的版本中废除消息键翻译。
  79. </para>
  80. </listitem>
  81. <listitem>
  82. <para>
  83. <emphasis>Labels.</emphasis> 如果翻译存在,元素标签 (labels)将被翻译。
  84. </para>
  85. </listitem>
  86. <listitem>
  87. <para>
  88. <emphasis>Fieldset Legends.</emphasis> 显示组和子表单缺省地在字段中解析。字段装饰器在解析字段钱尝试翻译 legend。
  89. </para>
  90. </listitem>
  91. <listitem>
  92. <para>
  93. <emphasis>Form and Element Descriptions.</emphasis> 所有表单类型(元素、表单、显示组、子表单)允许指定一个可选的条目描述。描述装饰器可用来解析它,缺省地它将尝试翻译它。
  94. </para>
  95. </listitem>
  96. <listitem>
  97. <para>
  98. <emphasis>Multi-option Values.</emphasis> 对于各种从 <code>Zend_Form_Element_Multi</code> 继承的条目(包括 MultiCheckbox、 Multiselect 和 Radio 元素),如果翻译可用,选项值(不是键)将被翻译。这意味着显示给用户的选项标签将被翻译。
  99. </para>
  100. </listitem>
  101. <listitem>
  102. <para>
  103. <emphasis>Submit and Button Labels.</emphasis> 各种提交和按钮元素(按钮,提交和重置)将翻译显示给用户的标签。
  104. </para>
  105. </listitem>
  106. </itemizedlist>
  107. </sect2>
  108. </sect1>
  109. <!--
  110. vim:se ts=4 sw=4 tw=80 et:
  111. -->