[GENERIC] Zend_Translate:
[zend.git] / documentation / manual / en / module_specs / Zend_Translate-Introduction.xml
blobaf7011a76239bae7cfa8fc91c3ae70652444844f
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- Reviewed: no -->
3 <sect1 id="zend.translate.introduction">
4     <title>Introduction</title>
6     <para>
7         <classname>Zend_Translate</classname> is Zend Framework's solution for multilingual
8         applications.
9     </para>
11     <para>
12         In multilingual applications, the content must be translated into
13         several languages and display content depending on the user's language.
14         <acronym>PHP</acronym> offers already several ways to handle such problems, however
15         the <acronym>PHP</acronym> solution has some problems:
16     </para>
18     <itemizedlist>
19         <listitem>
20             <para>
21                 <emphasis>Inconsistent <acronym>API</acronym>:</emphasis>
22                 There is no single <acronym>API</acronym> for the different source formats.
23                 The usage of gettext for example is very complicated.
24             </para>
25         </listitem>
27         <listitem>
28             <para>
29                 <emphasis>PHP supports only gettext and native array:</emphasis>
30                 <acronym>PHP</acronym> itself offers only support for array or gettext.
31                 All other source formats have to be coded manually,
32                 because there is no native support.
33             </para>
34         </listitem>
36         <listitem>
37             <para>
38                 <emphasis>No detection of the default language:</emphasis>
39                 The default language of the user cannot be detected without
40                 deeper knowledge of the backgrounds for
41                 the different web browsers.
42             </para>
43         </listitem>
45         <listitem>
46             <para>
47                 <emphasis>Gettext is not thread-safe:</emphasis>
48                 <acronym>PHP</acronym>'s gettext library is not thread safe, and it
49                 should not be used in a multithreaded environment.
50                 This is due to problems with gettext itself, not <acronym>PHP</acronym>,
51                 but it is an existing problem.
52             </para>
53         </listitem>
54     </itemizedlist>
56     <para>
57         <classname>Zend_Translate</classname> does not have the above problems. This is why we
58         recommend using <classname>Zend_Translate</classname> instead of <acronym>PHP</acronym>'s
59         native functions. The benefits of <classname>Zend_Translate</classname> are:
60     </para>
62     <itemizedlist>
63         <listitem>
64             <para>
65                 <emphasis>Supports multiple source formats:</emphasis>
66                 <classname>Zend_Translate</classname> supports several source formats, including
67                 those supported by <acronym>PHP</acronym>, and other formats including TMX
68                 and CSV files.
69             </para>
70         </listitem>
72         <listitem>
73             <para>
74                 <emphasis>Thread-safe gettext:</emphasis>
75                 The gettext reader of <classname>Zend_Translate</classname> is thread-safe.
76                 There are no problems using it in multi-threaded environments.
77             </para>
78         </listitem>
80         <listitem>
81             <para>
82                 <emphasis>Easy and generic <acronym>API</acronym>:</emphasis>
83                 The <acronym>API</acronym> of <classname>Zend_Translate</classname> is very simple
84                 and requires only a handful of functions.
85                 So it's easy to learn and easy to maintain.
86                 All source formats are handled the same way, so if the format
87                 of your source files change from Gettext to TMX,
88                 you only need to change one line of code to specify the
89                 storage adapter.
90             </para>
91         </listitem>
93         <listitem>
94             <para>
95                 <emphasis>Detection of the user's standard language:</emphasis>
96                 The preferred language of the user accessing the site can be
97                 detected and used by <classname>Zend_Translate</classname>.
98             </para>
99         </listitem>
101         <listitem>
102             <para>
103                 <emphasis>Automatic source detection:</emphasis>
104                 <classname>Zend_Translate</classname> is capable of detecting and integrating
105                 multiple source files and additionally detect the locale to be used depending on
106                 directory or filenames.
107             </para>
108         </listitem>
109     </itemizedlist>
111     <sect2 id="zend.translate.introduction.adapters">
112         <title>Starting multi-lingual</title>
114         <para>
115             So let's get started with multi-lingual business.
116             What we want to do is translate our string
117             output so the view produces the translated output.
118             Otherwise we would have to write one view
119             for each language, and no one would like to do this.
120             Generally, multi-lingual sites are very simple in their design.
121             There are only four steps you would have to do:
122         </para>
124         <orderedlist numeration='arabic'>
125             <listitem>
126                 <para>
127                     Decide which adapter you want to use;
128                 </para>
129             </listitem>
131             <listitem>
132                 <para>
133                     Create your view and integrate <classname>Zend_Translate</classname> in your
134                     code;
135                 </para>
136             </listitem>
138             <listitem>
139                 <para>
140                     Create the source file from your code;
141                 </para>
142             </listitem>
144             <listitem>
145                 <para>
146                     Translate your source file to the desired language.
147                 </para>
148             </listitem>
149         </orderedlist>
151         <para>
152             The following sections guide you through all four steps.
153             Read through the next few pages to create your own
154             multi-lingual web application.
155         </para>
156     </sect2>
157 </sect1>
158 <!--
159 vim:se ts=4 sw=4 et: