File: Zend_Translate-Plurals.xml

package info (click to toggle)
zendframework 1.12.9%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 133,584 kB
  • sloc: xml: 1,311,829; php: 570,173; sh: 170; makefile: 125; sql: 121
file content (386 lines) | stat: -rw-r--r-- 14,982 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: 22760 -->
<sect1 id="zend.translate.plurals">
    <title>Schreibweisen von Pluralformen für Übersetzungen</title>

    <para>
        Ab Zend Framework 1.9 ist <classname>Zend_Translate</classname> in der Lage, Unterstützung
        für Pluralformen anzubieten. Professionelle Übersetzung wird immer die Notwendigkeit haben,
        den Plural zu verwenden, da dieser in allen Sprachen gängig ist.
    </para>

    <para>
        Was sind Pluralformen? Im Allgemeinen sind Wörter im Plural Wörter, die eine numerische
        Bedeutung haben. Wie man sich sicher vorstellen kann, hat jede Sprache ihre eigene
        Definition von Pluralformen. Im Englischen gibt es einen einzigen Plural. Es gibt einen
        Singular, zum Beispiel "Car", was implizit ein Auto bedeutet. Und es gibt
        den Plural "Cars", welcher mehr als ein Auto aber auch null Autos bedeuten kann.
        Andere Sprachen wie russisch oder polnisch haben mehrere Pluralformen und auch die Regeln für
        die Pluralformen sind unterschiedlich.
    </para>

    <para>
        Wenn man Pluralformen mit <classname>Zend_Translate</classname> verwenden will, muß man nicht
        wissen, wie Pluralformen definiert werden. Nur der Übersetzer muß das wissen, da er die
        Übersetzung durchführt. Die einzige Information, die man haben muß, ist die Sprache.
    </para>

    <para>
        Es gibt zwei Wege für die Verwendung von Pluralformen: den traditionellen, der bedeutet, dass
        man eine eigene Methode verwendet, und einen modernen, der es erlaubt, Übersetzungen im Plural
        mit der gleichen Methode durchzuführen wie normale Übersetzungen.
    </para>

    <sect2 id="zend.translate.plurals.traditional">
        <title>Traditionelle Übersetzung des Plurals</title>

        <para>
            Personen, die in der Vergangenheit mit Gettext gearbeitet haben, werden mit
            traditionellen Pluralübersetzungen besser zurechtkommen. Es gibt eine eigene
            Methode <methodname>plural()</methodname>, die für Übersetzungen des Plurals verwendet
            werden kann.
        </para>

        <example id="zend.translate.plurals.traditional.example1">
            <title>Beispiel einer traditionellen Übersetzung des Plurals</title>

            <para>
                Die Methode <methodname>plural()</methodname> akzeptiert 4 Parameter. Der erste
                Parameter ist die messageId des Singular, der zweite ist die messageId des Plural und
                der dritte ist die Zahl oder Menge.
            </para>

            <para>
                Die Zahl wird verwendet, um den Plural zu erkennen, der zurückzugeben ist. Als
                optionaler vierter Parameter kann ein Gebietsschema angegeben werden, das verwendet
                wird, um die Übersetzung zurückzugeben.
            </para>

            <programlisting language="php"><![CDATA[
$translate = new Zend_Translate(
    array(
        'adapter' => 'gettext',
        'content' => '/path/to/german.mo',
        'locale'  => 'de'
    )
);
$translate->plural('Car', 'Cars', $number);
]]></programlisting>
        </example>
    </sect2>

    <sect2 id="zend.translate.plurals.modern">
        <title>Moderne Übersetzungen des Plurals</title>

        <para>
            Da traditionelle Übersetzungen des Plurals begrenzt ist auf Quellcode, der die englische
            Pluralform verwendet, wurde ein neuer Weg für Übersetzungen des Plurals hinzugefügt.
            Er erlaubt es, die gleiche <methodname>translate()</methodname> Methode für normale und
            Pluralübersetzungen zu verwenden.
        </para>

        <para>
            Um Plural-Übersetzungen mit <methodname>translate()</methodname> zu verwenden, muß man
            statt einem String ein Array als messageId angeben. Dieses Array muß die originalen
            messageId's der Plurale enthalten, dann die Anzahl und als letztes ein optionales
            Gebietsschema, wenn die angegebenen messageId's nicht in englischer Schreibweise
            vorliegen.
        </para>

        <example id="zend.translate.plurals.modern.example1">
            <title>Beispiel für moderne Übersetzungen des Plurals</title>

            <para>
                Wenn wir dieselben Pluraldefinitionen übersetzen wollen wie vorher, dann müsste
                unser Beispiel wie folgt aussehen.
            </para>

            <programlisting language="php"><![CDATA[
$translate = new Zend_Translate(
    array(
        'adapter' => 'gettext',
        'content' => '/path/to/german.mo',
        'locale'  => 'de'
    )
);
$translate->translate(array('Car', 'Cars', $number));
]]></programlisting>
        </example>

        <para>
            Bei der Verwendung von Pluralübersetzungen ist es auch möglich, jede Sprache als
            Quelle für messageId's zu verwenden.
        </para>

        <example id="zend.translate.plurals.modern.example2">
            <title>
                Beispiel einer modernen Übersetzung des Plurals durch Verwendung einer anderen
                Quellsprache
            </title>

            <para>
                Nehmen wir an, wir wollen russisch verwenden und nehmen wir außerdem an, dass die
                gegebenen messageId's russisch und nicht englisch sind.
            </para>

            <programlisting language="php"><![CDATA[
$translate = new Zend_Translate(
    array(
        'adapter' => 'gettext',
        'content' => '/path/to/german.mo',
        'locale'  => 'de'
    )
);
$translate->translate(array('Car',
                            'Cars first plural',
                            'Cars second plural',
                            $number,
                            'ru'));
]]></programlisting>
        </example>

        <para>
            Wie man sieht, kann man mehr als ein englisches Plural angeben. Aber dann muß man die
            Quellsprache angeben, damit <classname>Zend_Translate</classname> in diesem Fall weiß,
            welche Pluralregeln anzuwenden sind.
        </para>

        <para>
            Wenn man die Pluralsprache nicht angibt, dann wird standardmäßig englisch verwendet
            und jede zusätzliche Pluraldefinition wird ignoriert.
        </para>
    </sect2>

    <sect2 id="zend.translate.plurals.source">
        <title>Pluralquelldateien</title>

        <para>
            Nicht alle Quellformate unterstützen Pluralformen. Sehen Sie sich für Details diese
            Liste an:
        </para>

        <table id="zend.translate.plurals.source.supportedadapters">
            <title>Unterstützung für Plural</title>

            <tgroup cols="4">
                <thead>
                    <row>
                        <entry>Adapter</entry>
                        <entry>Plural unterstützt</entry>
                    </row>
                </thead>

                <tbody>
                    <row>
                        <entry>Array</entry>
                        <entry><emphasis>Ja</emphasis></entry>
                    </row>

                    <row>
                        <entry>Csv</entry>
                        <entry><emphasis>Ja</emphasis></entry>
                    </row>

                    <row>
                        <entry>Gettext</entry>
                        <entry><emphasis>Ja</emphasis></entry>
                    </row>

                    <row>
                        <entry>Ini</entry>
                        <entry><emphasis>Nein</emphasis></entry>
                    </row>

                    <row>
                        <entry>Qt</entry>
                        <entry><emphasis>Nein</emphasis></entry>
                    </row>

                    <row>
                        <entry>Tbx</entry>
                        <entry><emphasis>Nein</emphasis></entry>
                    </row>

                    <row>
                        <entry>Tmx</entry>
                        <entry><emphasis>Nein</emphasis></entry>
                    </row>

                    <row>
                        <entry>Xliff</entry>
                        <entry><emphasis>Nein</emphasis></entry>
                    </row>

                    <row>
                        <entry>XmlTm</entry>
                        <entry><emphasis>Nein</emphasis></entry>
                    </row>
                </tbody>
            </tgroup>
        </table>

        <para>
            Im folgenden sind Beispiele für die Definition von Pluralquelldateien zu finden.
        </para>

        <sect3 id="zend.translate.plurals.source.array">
            <title>Array-Quellen mit Pluraldefinitionen</title>

            <para>
                Ein Array mit Pluraldefinitionen hat wie im folgenden Beispiel auszusehen.
            </para>

            <programlisting language="php"><![CDATA[
array(
    'plural_0' => array(
        'plural_0 (ru)',
        'plural_1 (ru)',
        'plural_2 (ru)',
        'plural_3 (ru)'
    ),
    'plural_1' => ''
);
]]></programlisting>

            <para>
                Im obigen Beispiel sind 'plural_0' und 'plural_1' die
                Pluraldefinitionen des Quellcodes. Und im Array 'plural_0'
                sind alle übersetzten Pluralformen verfügbar. Sehen Sie sich das folgende
                Beispiel an, das tatsächlichen Inhalt und die Übersetzung von einer englischen Quelle
                ins Deutsche beinhaltet.
            </para>

            <programlisting language="php"><![CDATA[
array(
    'Car' => array(
        'Auto',
        'Autos'
    ),
    'Cars' => ''
);
]]></programlisting>

            <para>
                Wenn die eigene übersetzte Sprache mehr Pluralformen unterstützt, müssen diese
                einfach an das Array der ersten Pluralform angehängt werden. Wenn die eigene
                Quellsprache mehr Pluralformen unterstützt, dann muß einfach eine neue leere
                Übersetzung hinzugefügt werden.
            </para>
        </sect3>

        <sect3 id="zend.translate.plurals.source.csv">
            <title>CSV-Quellen mit Pluraldefinitionen</title>

            <para>
                Eine CSV-Datei mit Pluraldefinitionen muß wie im folgenden Beispiel
                aussehen.
            </para>

            <programlisting language="php"><![CDATA[
"plural_0";"plural_0 (ru)";"plural_1 (ru)";"plural_2 (ru)";"plural_3 (ru)"
"plural_1";
]]></programlisting>

            <para>
                Alle übersetzten Pluralformen müssen nach dem ersten Plural der Quellsprache
                hinzugefügt werden. Und alle weiteren Pluralformen der Quellsprache müssen
                darunter ohne Übersetzung hinzugefügt werden. Es ist zu beachten, dass ein
                Trennzeichen bei den leeren Quellpluralformen hinzugefügt werden muß.
            </para>
        </sect3>

        <sect3 id="zend.translate.plurals.source.gettext">
            <title>Gettext-Quellen mit Pluraldefinitionen</title>

            <para>
                Gettext-Quellen unterstützen Pluralformen von Haus aus. Es gibt keine
                Notwendigkeit Anpassungen durchzuführen, da die <filename>*.mo</filename> Datei
                alle notwendigen Daten enthält.
            </para>

            <note>
                <para>
                    Es ist zu beachten, dass Gettext die Verwendung von Quellsprachen, welche keine
                    englischen Pluralformen verwenden, nicht unterstützt. Wenn man plant
                    Quellsprachen zu verwenden, welche andere Pluralformen unterstützt, wie zum
                    Beispiel russisch, dann kann man Gettext nicht als Quelle verwenden.
                </para>
            </note>
        </sect3>
    </sect2>

    <sect2 id="zend.translate.plurals.customrules">
        <title>Eigene Pluralregeln</title>

        <para>
            In seltenen Fällen kann es nützlich sein, wenn man in der Lage ist eigene Pluralregeln
            zu definieren. Chinesisch zum Beispiel. Diese Sprache definiert zwei Pluralregeln.
            Standardmäßig verwendet Sie kein Plural. Aber in seltenen Fällen wird eine Regel wie
            diese verwendet: <emphasis>(number == 1) ? 0 : 1</emphasis>.
        </para>

        <para>
            Auch wenn man eine Sprache verwenden will, die keine bekannten Plural Regeln hat und
            man eigene Regeln definieren will.
        </para>

        <para>
            Das kann durch Verwendung von <methodname>Zend_Translate_Plural::setRule()</methodname>
            getan werden. Diese Methode erwartet zwei Parameter, welche angegeben werden müssen. Eine
            Regel, welche einfach ein Callback zu einer selbst definierten Methode ist. Und ein
            Gebietsschema für das diese Regel verwendet wird.
        </para>

        <para>
            Die eigene Regel könnte wie folgt aussehen:
        </para>

        <programlisting language="php"><![CDATA[
public function MyRule($number) {
    return ($number == 10) ? 0 : 1;
}
]]></programlisting>

        <para>
            Wie man sieht muss die eigene Regel einen Parameter akzeptieren. Er ist eine Zahl die
            man verwendet um zurückzugeben, welches Plural der Übersetzung verwendet werden muss.
            In unserem Beispiel haben wir definiert, dass wenn wir eine '10' erhalten, die Plural
            Definition 0 verwendet werden soll, und in allen anderen Fälle verwenden wir eine 1.
        </para>

        <para>
            Eigene Regeln können so einfach oder so kompliziert sein wie man will. Man muss einfach
            nur einen Integer-Wert zurückgeben. Die Pluraldefinition 0 steht hierbei für die
            Singular-Übersetzung und 1 steht für die erste Pluralregel.
        </para>

        <para>
            Um die eigene Regel zu aktivieren und diese mit dem gewünschten Gebietsschema zu
            verknüpfen, muss man den folgenden Aufruf tätigen:
        </para>

        <programlisting language="php"><![CDATA[
Zend_Translate_Plural::setPlural('MyPlural', 'zh');
]]></programlisting>

        <para>
            Jetzt haben wir unsere Pluraldefinition mit der chinesischen Sprache verknüpft.
        </para>

        <para>
            Man kann für jede Sprache eigene Pluralregeln definieren. Aber man sollte aufpassen
            dass man Pluralregeln setzt, bevor Übersetzungen durchgeführt werden.
        </para>

        <note>
            <title>Eigene Pluralregeln nur definieren, wenn dies benötigt wird</title>

            <para>
                <classname>Zend_Translate</classname> definiert Plurale für die meisten bekannten
                Sprachen. Man sollte keine eigenen Plurale definieren, wenn man das nicht
                benötigt. Die Standardregeln funktionieren meistens.
            </para>
        </note>
    </sect2>
</sect1>