forked from symfony/validator
-
Notifications
You must be signed in to change notification settings - Fork 0
/
DefaultTranslator.php
167 lines (157 loc) · 5.12 KB
/
DefaultTranslator.php
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
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Validator;
use Symfony\Component\Translation\TranslatorInterface;
use Symfony\Component\Validator\Exception\BadMethodCallException;
use Symfony\Component\Validator\Exception\InvalidArgumentException;
/**
* Simple translator implementation that simply replaces the parameters in
* the message IDs.
*
* Example usage:
*
* $translator = new DefaultTranslator();
*
* echo $translator->trans(
* 'This is a {{ var }}.',
* array('{{ var }}' => 'donkey')
* );
*
* // -> This is a donkey.
*
* echo $translator->transChoice(
* 'This is {{ count }} donkey.|These are {{ count }} donkeys.',
* 3,
* array('{{ count }}' => 'three')
* );
*
* // -> These are three donkeys.
*
* This translator does not support message catalogs, translation domains or
* locales. Instead, it implements a subset of the capabilities of
* {@link \Symfony\Component\Translation\Translator} and can be used in places
* where translation is not required by default but should be optional.
*
* @author Bernhard Schussek <[email protected]>
*/
class DefaultTranslator implements TranslatorInterface
{
/**
* Interpolates the given message.
*
* Parameters are replaced in the message in the same manner that
* {@link strtr()} uses.
*
* Example usage:
*
* $translator = new DefaultTranslator();
*
* echo $translator->trans(
* 'This is a {{ var }}.',
* array('{{ var }}' => 'donkey')
* );
*
* // -> This is a donkey.
*
* @param string $id The message id
* @param array $parameters An array of parameters for the message
* @param string $domain Ignored
* @param string $locale Ignored
*
* @return string The interpolated string
*/
public function trans($id, array $parameters = array(), $domain = null, $locale = null)
{
return strtr($id, $parameters);
}
/**
* Interpolates the given choice message by choosing a variant according to a number.
*
* The variants are passed in the message ID using the format
* "<singular>|<plural>". "<singular>" is chosen if the passed $number is
* exactly 1. "<plural>" is chosen otherwise.
*
* This format is consistent with the format supported by
* {@link \Symfony\Component\Translation\Translator}, but it does not
* have the same expressiveness. While Translator supports intervals in
* message translations, which are needed for languages other than English,
* this translator does not. You should use Translator or a custom
* implementation of {@link TranslatorInterface} if you need this or similar
* functionality.
*
* Example usage:
*
* echo $translator->transChoice(
* 'This is {{ count }} donkey.|These are {{ count }} donkeys.',
* 0,
* array('{{ count }}' => 0)
* );
*
* // -> These are 0 donkeys.
*
* echo $translator->transChoice(
* 'This is {{ count }} donkey.|These are {{ count }} donkeys.',
* 1,
* array('{{ count }}' => 1)
* );
*
* // -> This is 1 donkey.
*
* echo $translator->transChoice(
* 'This is {{ count }} donkey.|These are {{ count }} donkeys.',
* 3,
* array('{{ count }}' => 3)
* );
*
* // -> These are 3 donkeys.
*
* @param string $id The message id
* @param int $number The number to use to find the index of the message
* @param array $parameters An array of parameters for the message
* @param string $domain Ignored
* @param string $locale Ignored
*
* @return string The translated string
*
* @throws InvalidArgumentException If the message id does not have the format
* "singular|plural".
*/
public function transChoice($id, $number, array $parameters = array(), $domain = null, $locale = null)
{
$ids = explode('|', $id);
if (1 == $number) {
return strtr($ids[0], $parameters);
}
if (!isset($ids[1])) {
throw new InvalidArgumentException(sprintf('The message "%s" cannot be pluralized, because it is missing a plural (e.g. "There is one apple|There are %%count%% apples").', $id));
}
return strtr($ids[1], $parameters);
}
/**
* Not supported.
*
* @param string $locale The locale
*
* @throws BadMethodCallException
*/
public function setLocale($locale)
{
throw new BadMethodCallException('Unsupported method.');
}
/**
* Returns the locale of the translator.
*
* @return string Always returns 'en'
*/
public function getLocale()
{
return 'en';
}
}