Merge branch '2.3' into 2.4

* 2.3:
  fixed CS
  allow the TextAreaFormField to be used with valid/invalid HTML
  Create security.id.xlf
  [DependencyInjection] Remove unneeded file
  [Twig] removed obsolete conditions on Twig versions
  added lines to exceptions for the trans and transchoice tags
  [Form] Make FormInterface::add docblock more explicit
  [Security] Add zh_CN translations
  [Validator][Translation]update zh_CN translations
  [Validator] Minor fix in XmlLoader
This commit is contained in:
Fabien Potencier 2014-01-26 22:33:04 +01:00
commit 6c11d55b06
13 changed files with 307 additions and 90 deletions

View File

@ -95,22 +95,10 @@ class TransNode extends \Twig_Node
preg_match_all('/(?<!%)%([^%]+)%/', $msg, $matches);
if (version_compare(\Twig_Environment::VERSION, '1.5', '>=')) {
foreach ($matches[1] as $var) {
$key = new \Twig_Node_Expression_Constant('%'.$var.'%', $body->getLine());
if (!$vars->hasElement($key)) {
$vars->addElement(new \Twig_Node_Expression_Name($var, $body->getLine()), $key);
}
}
} else {
$current = array();
foreach ($vars as $name => $var) {
$current[$name] = true;
}
foreach ($matches[1] as $var) {
if (!isset($current['%'.$var.'%'])) {
$vars->setNode('%'.$var.'%', new \Twig_Node_Expression_Name($var, $body->getLine()));
}
foreach ($matches[1] as $var) {
$key = new \Twig_Node_Expression_Constant('%'.$var.'%', $body->getLine());
if (!$vars->hasElement($key)) {
$vars->addElement(new \Twig_Node_Expression_Name($var, $body->getLine()), $key);
}
}

View File

@ -43,6 +43,33 @@ class TranslationExtensionTest extends \PHPUnit_Framework_TestCase
$this->assertEquals($expected, $this->getTemplate($template)->render($variables));
}
/**
* @expectedException \Twig_Error_Syntax
* @expectedExceptionMessage Unexpected token. Twig was looking for the "with", "from", or "into" keyword in "index" at line 3.
*/
public function testTransUnknownKeyword()
{
$output = $this->getTemplate("{% trans \n\nfoo %}{% endtrans %}")->render();
}
/**
* @expectedException \Twig_Error_Syntax
* @expectedExceptionMessage A message inside a trans tag must be a simple text in "index" at line 2.
*/
public function testTransComplexBody()
{
$output = $this->getTemplate("{% trans %}\n{{ 1 + 2 }}{% endtrans %}")->render();
}
/**
* @expectedException \Twig_Error_Syntax
* @expectedExceptionMessage A message inside a transchoice tag must be a simple text in "index" at line 2.
*/
public function testTransChoiceComplexBody()
{
$output = $this->getTemplate("{% transchoice count %}\n{{ 1 + 2 }}{% endtranschoice %}")->render();
}
public function getTransTests()
{
return array(

View File

@ -64,7 +64,7 @@ class TransChoiceTokenParser extends TransTokenParser
$body = $this->parser->subparse(array($this, 'decideTransChoiceFork'), true);
if (!$body instanceof \Twig_Node_Text && !$body instanceof \Twig_Node_Expression) {
throw new \Twig_Error_Syntax('A message must be a simple text.');
throw new \Twig_Error_Syntax('A message inside a transchoice tag must be a simple text.', $body->getLine(), $stream->getFilename());
}
$stream->expect(\Twig_Token::BLOCK_END_TYPE);

View File

@ -55,7 +55,7 @@ class TransTokenParser extends \Twig_TokenParser
$stream->next();
$locale = $this->parser->getExpressionParser()->parseExpression();
} elseif (!$stream->test(\Twig_Token::BLOCK_END_TYPE)) {
throw new \Twig_Error_Syntax('Unexpected token. Twig was looking for the "with" or "from" keyword.');
throw new \Twig_Error_Syntax('Unexpected token. Twig was looking for the "with", "from", or "into" keyword.', $stream->getCurrent()->getLine(), $stream->getFilename());
}
}
@ -64,7 +64,7 @@ class TransTokenParser extends \Twig_TokenParser
$body = $this->parser->subparse(array($this, 'decideTransFork'), true);
if (!$body instanceof \Twig_Node_Text && !$body instanceof \Twig_Node_Expression) {
throw new \Twig_Error_Syntax('A message inside a trans tag must be a simple text');
throw new \Twig_Error_Syntax('A message inside a trans tag must be a simple text.', $body->getLine(), $stream->getFilename());
}
$stream->expect(\Twig_Token::BLOCK_END_TYPE);

View File

@ -1,9 +0,0 @@
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="foo" class="BarClass" />
</services>
</container>

View File

@ -33,7 +33,7 @@ class TextareaFormField extends FormField
$this->value = null;
foreach ($this->node->childNodes as $node) {
$this->value .= $this->document->saveXML($node);
$this->value .= $node->wholeText;
}
}
}

View File

@ -29,5 +29,18 @@ class TextareaFormFieldTest extends FormFieldTestCase
} catch (\LogicException $e) {
$this->assertTrue(true, '->initialize() throws a \LogicException if the node is not a textarea');
}
// Ensure that valid HTML can be used on a textarea.
$node = $this->createNode('textarea', 'foo bar <h1>Baz</h1>');
$field = new TextareaFormField($node);
$this->assertEquals('foo bar <h1>Baz</h1>', $field->getValue(), '->initialize() sets the value of the field to the textarea node value');
// Ensure that we don't do any DOM manipulation/validation by passing in
// "invalid" HTML.
$node = $this->createNode('textarea', 'foo bar <h1>Baz</h2>');
$field = new TextareaFormField($node);
$this->assertEquals('foo bar <h1>Baz</h2>', $field->getValue(), '->initialize() sets the value of the field to the textarea node value');
}
}

View File

@ -39,7 +39,7 @@ interface FormInterface extends \ArrayAccess, \Traversable, \Countable
public function getParent();
/**
* Adds a child to the form.
* Adds or replaces a child to the form.
*
* @param FormInterface|string|integer $child The FormInterface instance or the name of the child.
* @param string|null $type The child's type, if a name was passed.

View File

@ -0,0 +1,71 @@
<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file source-language="en" datatype="plaintext" original="file.ext">
<body>
<trans-unit id="1">
<source>An authentication exception occurred.</source>
<target>Terjadi sebuah pengecualian otentikasi.</target>
</trans-unit>
<trans-unit id="2">
<source>Authentication credentials could not be found.</source>
<target>Kredensial otentikasi tidak bisa ditemukan.</target>
</trans-unit>
<trans-unit id="3">
<source>Authentication request could not be processed due to a system problem.</source>
<target>Permintaan otentikasi tidak bisa diproses karena masalah sistem.</target>
</trans-unit>
<trans-unit id="4">
<source>Invalid credentials.</source>
<target>Kredensial salah.</target>
</trans-unit>
<trans-unit id="5">
<source>Cookie has already been used by someone else.</source>
<target>Cookie sudah digunakan oleh orang lain.</target>
</trans-unit>
<trans-unit id="6">
<source>Not privileged to request the resource.</source>
<target>Tidak berhak untuk meminta sumber daya.</target>
</trans-unit>
<trans-unit id="7">
<source>Invalid CSRF token.</source>
<target>Token CSRF salah.</target>
</trans-unit>
<trans-unit id="8">
<source>Digest nonce has expired.</source>
<target>Digest nonce telah berakhir.</target>
</trans-unit>
<trans-unit id="9">
<source>No authentication provider found to support the authentication token.</source>
<target>Tidak ditemukan penyedia otentikasi untuk mendukung token otentikasi.</target>
</trans-unit>
<trans-unit id="10">
<source>No session available, it either timed out or cookies are not enabled.</source>
<target>Tidak ada sesi yang tersedia, mungkin waktu sudah habis atau cookie tidak diaktifkan</target>
</trans-unit>
<trans-unit id="11">
<source>No token could be found.</source>
<target>Tidak ada token yang bisa ditemukan.</target>
</trans-unit>
<trans-unit id="12">
<source>Username could not be found.</source>
<target>Username tidak bisa ditemukan.</target>
</trans-unit>
<trans-unit id="13">
<source>Account has expired.</source>
<target>Akun telah berakhir.</target>
</trans-unit>
<trans-unit id="14">
<source>Credentials have expired.</source>
<target>Kredensial telah berakhir.</target>
</trans-unit>
<trans-unit id="15">
<source>Account is disabled.</source>
<target>Akun dinonaktifkan.</target>
</trans-unit>
<trans-unit id="16">
<source>Account is locked.</source>
<target>Akun terkunci.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@ -0,0 +1,71 @@
<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file source-language="en" datatype="plaintext" original="file.ext">
<body>
<trans-unit id="1">
<source>An authentication exception occurred.</source>
<target>身份验证发生异常。</target>
</trans-unit>
<trans-unit id="2">
<source>Authentication credentials could not be found.</source>
<target>没有找到身份验证的凭证。</target>
</trans-unit>
<trans-unit id="3">
<source>Authentication request could not be processed due to a system problem.</source>
<target>由于系统故障,身份验证的请求无法被处理。</target>
</trans-unit>
<trans-unit id="4">
<source>Invalid credentials.</source>
<target>无效的凭证。</target>
</trans-unit>
<trans-unit id="5">
<source>Cookie has already been used by someone else.</source>
<target>Cookie 已经被其他人使用。</target>
</trans-unit>
<trans-unit id="6">
<source>Not privileged to request the resource.</source>
<target>没有权限请求此资源。</target>
</trans-unit>
<trans-unit id="7">
<source>Invalid CSRF token.</source>
<target>无效的 CSRF token 。</target>
</trans-unit>
<trans-unit id="8">
<source>Digest nonce has expired.</source>
<target>摘要随机串digest nonce已过期。</target>
</trans-unit>
<trans-unit id="9">
<source>No authentication provider found to support the authentication token.</source>
<target>没有找到支持此 token 的身份验证服务提供方。</target>
</trans-unit>
<trans-unit id="10">
<source>No session available, it either timed out or cookies are not enabled.</source>
<target>Session 不可用。会话超时或没有启用 cookies 。</target>
</trans-unit>
<trans-unit id="11">
<source>No token could be found.</source>
<target>找不到 token 。</target>
</trans-unit>
<trans-unit id="12">
<source>Username could not be found.</source>
<target>找不到用户名。</target>
</trans-unit>
<trans-unit id="13">
<source>Account has expired.</source>
<target>帐号已过期。</target>
</trans-unit>
<trans-unit id="14">
<source>Credentials have expired.</source>
<target>凭证已过期。</target>
</trans-unit>
<trans-unit id="15">
<source>Account is disabled.</source>
<target>帐号已被禁用。</target>
</trans-unit>
<trans-unit id="16">
<source>Account is locked.</source>
<target>帐号已被锁定。</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@ -36,10 +36,10 @@ abstract class AbstractLoader implements LoaderInterface
/**
* Creates a new constraint instance for the given constraint name.
*
* @param string $name The constraint name. Either a constraint relative
* to the default constraint namespace, or a fully
* qualified class name
* @param array $options The constraint options
* @param string $name The constraint name. Either a constraint relative
* to the default constraint namespace, or a fully
* qualified class name
* @param mixed $options The constraint options
*
* @return Constraint
*

View File

@ -105,7 +105,7 @@ class XmlFileLoader extends FileLoader
$options = null;
}
$constraints[] = $this->newConstraint($node['name'], $options);
$constraints[] = $this->newConstraint((string) $node['name'], $options);
}
return $constraints;

View File

@ -4,223 +4,279 @@
<body>
<trans-unit id="1">
<source>This value should be false.</source>
<target>该变量的值应为 false.</target>
<target>该变量的值应为 false</target>
</trans-unit>
<trans-unit id="2">
<source>This value should be true.</source>
<target>该变量的值应为 true.</target>
<target>该变量的值应为 true</target>
</trans-unit>
<trans-unit id="3">
<source>This value should be of type {{ type }}.</source>
<target>该变量的类型应为 {{ type }}.</target>
<target>该变量的类型应为 {{ type }}</target>
</trans-unit>
<trans-unit id="4">
<source>This value should be blank.</source>
<target>该变量值应为空.</target>
<target>该变量值应为空</target>
</trans-unit>
<trans-unit id="5">
<source>The value you selected is not a valid choice.</source>
<target>选定变量的值不是有效的选项.</target>
<target>选定变量的值不是有效的选项</target>
</trans-unit>
<trans-unit id="6">
<source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
<target>您至少要选择 {{ limit }} 个选项.</target>
<target>您至少要选择 {{ limit }} 个选项</target>
</trans-unit>
<trans-unit id="7">
<source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
<target>您最多能选择 {{ limit }} 个选项.</target>
<target>您最多能选择 {{ limit }} 个选项</target>
</trans-unit>
<trans-unit id="8">
<source>One or more of the given values is invalid.</source>
<target>一个或者多个给定的值无效.</target>
<target>一个或者多个给定的值无效</target>
</trans-unit>
<trans-unit id="9">
<source>The fields {{ fields }} were not expected.</source>
<target>非预期字段 {{ fields }}.</target>
<target>非预期字段 {{ fields }}</target>
</trans-unit>
<trans-unit id="10">
<source>The fields {{ fields }} are missing.</source>
<target>遗漏字段 {{ fields }}.</target>
<target>遗漏字段 {{ fields }}</target>
</trans-unit>
<trans-unit id="11">
<source>This value is not a valid date.</source>
<target>该值不是一个有效日期date.</target>
<target>该值不是一个有效的日期date</target>
</trans-unit>
<trans-unit id="12">
<source>This value is not a valid datetime.</source>
<target>该值不是一个有效日期时间datetime.</target>
<target>该值不是一个有效的日期时间datetime</target>
</trans-unit>
<trans-unit id="13">
<source>This value is not a valid email address.</source>
<target>该值不是一个有效邮件地址.</target>
<target>该值不是一个有效的邮件地址。</target>
</trans-unit>
<trans-unit id="14">
<source>The file could not be found.</source>
<target>文件未找到.</target>
<target>文件未找到</target>
</trans-unit>
<trans-unit id="15">
<source>The file is not readable.</source>
<target>文件不可读.</target>
<target>文件不可读</target>
</trans-unit>
<trans-unit id="16">
<source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
<target>文件太大 ({{ size }} {{ suffix }}). 文件大小不可以超过 {{ limit }} {{ suffix }}.</target>
<target>文件太大 ({{ size }} {{ suffix }})。文件大小不可以超过 {{ limit }} {{ suffix }} 。</target>
</trans-unit>
<trans-unit id="17">
<source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
<target>文件类型不合法 ({{ type }}). 合法的文件类型有 {{ types }}.</target>
<target>无效的文件类型 ({{ type }}) 。允许的文件类型有 {{ types }} 。</target>
</trans-unit>
<trans-unit id="18">
<source>This value should be {{ limit }} or less.</source>
<target>这个变量的值应该小于或等于 {{ limit }}.</target>
<target>这个变量的值应该小于或等于 {{ limit }}</target>
</trans-unit>
<trans-unit id="19">
<source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
<target>字符串太长, 长度不可超过 {{ limit }} 个字符.</target>
<target>字符串太长,长度不可超过 {{ limit }} 个字符。</target>
</trans-unit>
<trans-unit id="20">
<source>This value should be {{ limit }} or more.</source>
<target>该变量的值应该大于或等于 {{ limit }}.</target>
<target>该变量的值应该大于或等于 {{ limit }}</target>
</trans-unit>
<trans-unit id="21">
<source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
<target>字符串太短, 长度不可少于 {{ limit }} 个字符.</target>
<target>字符串太短,长度不可少于 {{ limit }} 个字符。</target>
</trans-unit>
<trans-unit id="22">
<source>This value should not be blank.</source>
<target>该变量不应为空.</target>
<target>该变量不应为空</target>
</trans-unit>
<trans-unit id="23">
<source>This value should not be null.</source>
<target>该变量不应为 null.</target>
<target>该变量不应为 null</target>
</trans-unit>
<trans-unit id="24">
<source>This value should be null.</source>
<target>该变量应为空 null.</target>
<target>该变量应为空 null</target>
</trans-unit>
<trans-unit id="25">
<source>This value is not valid.</source>
<target>该变量值无效.</target>
<target>该变量值无效</target>
</trans-unit>
<trans-unit id="26">
<source>This value is not a valid time.</source>
<target>该值不是一个有效时间.</target>
<target>该值不是一个有效的时间。</target>
</trans-unit>
<trans-unit id="27">
<source>This value is not a valid URL.</source>
<target>该值不是一个有效的 URL 地址.</target>
<target>该值不是一个有效的 URL </target>
</trans-unit>
<trans-unit id="31">
<source>The two values should be equal.</source>
<target>该两个变量的值应该相同.</target>
<target>这两个变量的值应该相等。</target>
</trans-unit>
<trans-unit id="32">
<source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
<target>文件太大, 文件大小不可以超过 {{ limit }} {{ suffix }}.</target>
<target>文件太大,文件大小不可以超过 {{ limit }} {{ suffix }}</target>
</trans-unit>
<trans-unit id="33">
<source>The file is too large.</source>
<target>文件太大.</target>
<target>文件太大</target>
</trans-unit>
<trans-unit id="34">
<source>The file could not be uploaded.</source>
<target>文件不可被上传.</target>
<target>无法上传此文件。</target>
</trans-unit>
<trans-unit id="35">
<source>This value should be a valid number.</source>
<target>该值应该为有效的数字.</target>
<target>该值应该为有效的数字</target>
</trans-unit>
<trans-unit id="36">
<source>This value is not a valid country.</source>
<target>该值不是有效的国家名.</target>
<target>该值不是有效的国家名</target>
</trans-unit>
<trans-unit id="37">
<source>This file is not a valid image.</source>
<target>该文件不是有效的图片.</target>
<target>该文件不是有效的图片</target>
</trans-unit>
<trans-unit id="38">
<source>This is not a valid IP address.</source>
<target>该值不是有效的IP地址.</target>
<target>该值不是有效的IP地址</target>
</trans-unit>
<trans-unit id="39">
<source>This value is not a valid language.</source>
<target>该值不是有效的语言名.</target>
<target>该值不是有效的语言名</target>
</trans-unit>
<trans-unit id="40">
<source>This value is not a valid locale.</source>
<target>该值不是有效的区域值.</target>
<target>该值不是有效的区域值locale</target>
</trans-unit>
<trans-unit id="41">
<source>This value is already used.</source>
<target>该值已经被使用了.</target>
<target>该值已经被使用</target>
</trans-unit>
<trans-unit id="42">
<source>The size of the image could not be detected.</source>
<target>不能解析图片大小.</target>
<target>不能解析图片大小</target>
</trans-unit>
<trans-unit id="43">
<source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
<target>图片太宽 ({{ width }}px),最大宽度为 {{ max_width }}px.</target>
<target>图片太宽 ({{ width }}px),最大宽度为 {{ max_width }}px</target>
</trans-unit>
<trans-unit id="44">
<source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
<target>图片宽度不够 ({{ width }}px),最小宽度为 {{ min_width }}px.</target>
<target>图片宽度不够 ({{ width }}px),最小宽度为 {{ min_width }}px</target>
</trans-unit>
<trans-unit id="45">
<source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
<target>图片太高 ({{ height }}px),最大高度为 {{ max_height }}px.</target>
<target>图片太高 ({{ height }}px),最大高度为 {{ max_height }}px</target>
</trans-unit>
<trans-unit id="46">
<source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
<target>图片高度不够 ({{ height }}px),最小高度为 {{ min_height }}px.</target>
<target>图片高度不够 ({{ height }}px),最小高度为 {{ min_height }}px</target>
</trans-unit>
<trans-unit id="47">
<source>This value should be the user current password.</source>
<target>该变量应为用户当前的密码.</target>
<target>该变量的值应为用户当前的密码。</target>
</trans-unit>
<trans-unit id="48">
<source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
<target>该变量应为 {{ limit }} 个字符.</target>
<target>该变量应为 {{ limit }} 个字符</target>
</trans-unit>
<trans-unit id="49">
<source>The file was only partially uploaded.</source>
<target>该文件的上传不完整.</target>
<target>该文件的上传不完整</target>
</trans-unit>
<trans-unit id="50">
<source>No file was uploaded.</source>
<target>没有上传任何文件.</target>
<target>没有上传任何文件</target>
</trans-unit>
<trans-unit id="51">
<source>No temporary folder was configured in php.ini.</source>
<target>php.ini里没有配置临时文件目录.</target>
<target>php.ini 里没有配置临时文件目录。</target>
</trans-unit>
<trans-unit id="52">
<source>Cannot write temporary file to disk.</source>
<target>临时文件写入磁盘失败.</target>
<target>临时文件写入磁盘失败</target>
</trans-unit>
<trans-unit id="53">
<source>A PHP extension caused the upload to fail.</source>
<target>某个PHP扩展造成上传失败.</target>
<target>某个 PHP 扩展造成上传失败。</target>
</trans-unit>
<trans-unit id="54">
<source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
<target>该集合最少应包含 {{ limit }} 个元素.</target>
<target>该集合最少应包含 {{ limit }} 个元素</target>
</trans-unit>
<trans-unit id="55">
<source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
<target>该集合最多包含 {{ limit }} 个元素.</target>
<target>该集合最多包含 {{ limit }} 个元素</target>
</trans-unit>
<trans-unit id="56">
<source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
<target>该集合应包含正好 {{ limit }} 个元素element.</target>
<target>该集合应包含 {{ limit }} 个元素 element 。</target>
</trans-unit>
<trans-unit id="57">
<source>Invalid card number.</source>
<target>无效的信用卡号.</target>
<target>无效的信用卡号</target>
</trans-unit>
<trans-unit id="58">
<source>Unsupported card type or invalid card number.</source>
<target>不支持的信用卡类型或无效的信用卡号.</target>
<target>不支持的信用卡类型或无效的信用卡号。</target>
</trans-unit>
<trans-unit id="59">
<source>This is not a valid International Bank Account Number (IBAN).</source>
<target>该值不是有效的国际银行帐号IBAN。</target>
</trans-unit>
<trans-unit id="60">
<source>This value is not a valid ISBN-10.</source>
<target>该值不是有效的10位国际标准书号ISBN-10。</target>
</trans-unit>
<trans-unit id="61">
<source>This value is not a valid ISBN-13.</source>
<target>该值不是有效的13位国际标准书号ISBN-13。</target>
</trans-unit>
<trans-unit id="62">
<source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
<target>该值不是有效的国际标准书号ISBN-10 或 ISBN-13。</target>
</trans-unit>
<trans-unit id="63">
<source>This value is not a valid ISSN.</source>
<target>该值不是有效的国际标准期刊号ISSN。</target>
</trans-unit>
<trans-unit id="64">
<source>This value is not a valid currency.</source>
<target>该值不是有效的货币名currency。</target>
</trans-unit>
<trans-unit id="65">
<source>This value should be equal to {{ compared_value }}.</source>
<target>该值应等于 {{ compared_value }} 。</target>
</trans-unit>
<trans-unit id="66">
<source>This value should be greater than {{ compared_value }}.</source>
<target>该值应大于 {{ compared_value }} 。</target>
</trans-unit>
<trans-unit id="67">
<source>This value should be greater than or equal to {{ compared_value }}.</source>
<target>该值应大于或等于 {{ compared_value }} 。</target>
</trans-unit>
<trans-unit id="68">
<source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
<target>该值应与 {{ compared_value_type }} {{ compared_value }} 相同。</target>
</trans-unit>
<trans-unit id="69">
<source>This value should be less than {{ compared_value }}.</source>
<target>该值应小于 {{ compared_value }} 。</target>
</trans-unit>
<trans-unit id="70">
<source>This value should be less than or equal to {{ compared_value }}.</source>
<target>该值应小于或等于 {{ compared_value }} 。</target>
</trans-unit>
<trans-unit id="71">
<source>This value should not be equal to {{ compared_value }}.</source>
<target>该值不应先等于 {{ compared_value }} 。</target>
</trans-unit>
<trans-unit id="72">
<source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
<target>该值不应与 {{ compared_value_type }} {{ compared_value }} 相同。</target>
</trans-unit>
</body>
</file>