浏览文章

文章信息

Element 'package': [facet 'pattern'] The value 'magento2_zh_hans_cn' is not accepted by the pattern '[a-zA-Z\-_]+'. 14156

The XML in file "/data/www/wwwroot/onlinestore-dev.resmedchina.cn/app/i18n/benheart/magento2_zh_hans_cn-master/language.xml" is invalid: Element 'package': [facet 'pattern'] The value 'magento2_zh_hans_cn' is not accepted by the pattern '[a-zA-Z\-_]+'. Line: 5 Element 'package': 'magento2_zh_hans_cn' is not a valid value of the atomic type 'packageType'. Line: 5 Verify the XML and try again.


原因:

语言包在Magento2.3.2环境下不支持数字表达,也就是这句话:The value 'magento2_zh_hans_cn' is not accepted by the pattern '[a-zA-Z\-_]。

后面的正则,不匹配数字。

解决:


按照一下步骤重建语言包,包名不要含有数字

创建目录和文件

语言包位于app/i18n/<VendorName>Magento文件系统下的目录中,包含以下内容:

  • 必需的许可证文件
  • composer.json
  • registration.php寄存器的语言包
  • language.xml 元信息文件

您必须小写整个路径。例如,请参阅de_de

要创建这些文件:

  1. 在下创建一个目录app/i18n

    例如,Magento语言包位于 app/i18n/magento

  2. 添加所需的任何许可证文件。
  3. 添加composer.json指定语言包的依赖项。
  4. 注册语言包 registration.php
  5. 添加language.xml元信息文件,如下一节中所述。

语言包language.xml

language.xml配置文件中声明语言包时,必须指定此包的语言继承顺序。

语言继承使您能够基于称为父级的现有翻译创建称为子级的新翻译子翻译覆盖父级。但是,如果子翻译无法上传或显示或缺少短语或单词,Magento将使用父语言环境语言包继承的示例

要声明包,请指定以下信息:

<?xml version="1.0"?>
<language xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:noNamespaceSchemaLocation="urn:magento:framework:App/Language/package.xsd">
    <code>en_GB</code>
    <vendor>magento</vendor>
    <package>en_gb</package>
    <sort_order>100</sort_order>
    <use vendor="oxford-university" package="en_us"/>
</language>


参数:

  • <code>语言包区域设置(必需)
  • <vendor>模块的供应商名称(必填)
  • <package>语言包名称(必填)
  • <sort_order>当存储有多个语言包时,可以优先上载包
  • <use>要从中继承词典的父语言包区域设置

如有必要,您可以指定多个父包。父包在首次列出的第一个使用的基础上应用。

语言继承的示例

假设一个语言包继承自另外两个包,并且这些包也有父包和“祖父包”包。

如果语言包继承自两个包,则它language.xml可能如下所示:

<?xml version="1.0"?>
<language xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:noNamespaceSchemaLocation="urn:magento:framework:App/Language/package.xsd">
    <code>en_GB</code>
    <vendor>magento</vendor>
    <package>language_pack</package>
    <sort_order>100</sort_order>
    <use vendor="parent-package-one" package="language_package_one"/>
    <use vendor="parent-package-two" package="language_package_two"/>
</language>

在前面的示例中:

  • language_package_one继承自en_au_packageen_au_package继承自en_ie_package
  • language_package_two继承自en_ca_packageen_ca_package继承自en_us_package

如果Magento应用程序无法在en_GB包中找到单词或短语,它将按以下顺序查找其他包:

  1. parent-package-one/language_package_one
  2. <vendorname>/en_au_package
  3. <vendorname>/en_ie_package
  4. parent-package-two/language_package_two
  5. <vendorname>/en_ca_package
  6. <vendorname>/en_us_package

指定语言包之间的所有继承可能会导致创建循环继承链。使用Magento \ Test \ Integrity \ App \ Language \ CircularDependencyTest测试来查找和修复此类链。

为一种语言配置多个包

为了帮助您提高商店的灵活性,您可以在商店中上传多种语言包。因此,您可以为商店的不同部分使用不同的自定义包,因为系统会编译可用于某种语言的所有包中的单个包。

要为现有语言启用其他程序包,请将新程序包命名为除现有语言代码名称之外的任何名称(以避免混淆)。在语言包的language.xml元信息文件中指定包的配置,如下一节中所述。

使用翻译命令的示例

以下部分提供了使用本主题中讨论的命令创建翻译词典和翻译包的端到端示例:

示例:为模块或主题创建翻译字典

要将德语翻译添加到要分发给其他商家的模块或主题:

  1. 收集模块中的短语:

    bin/magento i18n:collect-phrases -o "/var/www/html/magento2/app/code/ExampleCorp/SampleModule/i18n/xx_YY.csv" /var/www/html/magento2/app/code/ExampleCorp/SampleModule

    .csv文件名必须语言环境完全匹配,包括字符的大小写。

  2. 使用这些指南翻译单词和短语
  3. 如有必要,复制xx_YY.csv/var/www/html/magento2/app/code/ExampleCorp/SampleModule/i18n模块的主题目录或复制模块的主题目录(取决于翻译词典是用于模块还是主题)。

示例:创建语言包

与前面的示例类似,生成.csv文件,但不是指定模块或主题目录,而是指定整个Magento应用程序根目录。结果.csv包含命令可以在代码中找到的任何短语。

  1. 收集模块中的短语:

    bin/magento i18n:collect-phrases -o "/var/www/html/magento2/xx_YY.csv" -m

    .csv文件名必须完全匹配的语言环境,包括人物的情况下。

  2. 使用这些指南翻译单词和短语
  3. 创建语言包。

    bin/magento i18n:pack /var/www/html/magento2/xx_YY.csv -d xx_YY
  4. 为语言包创建目录。

    例如, /var/www/html/magento2/app/i18n/ExampleCorp/xx_yy

  5. 在该目录中,添加以下所有内容:

    • 许可证,如果需要的话
    • composer.json (以下样本)
    • registration.php (以下样本)
    • language.xml (以下样本)

    样品composer.json

    {
      "name": "examplecorp/language-xx_yy",
      "description": "Sample language",
      "version": "100.0.2",
      "license": [
        "OSL-3.0",
        "AFL-3.0"
      ],
      "require": {
        "magento/framework": "100.0.*"
      },
      "type": "magento2-language",
      "autoload": {
        "files": [
          "registration.php"
        ]
      }
    }

    样品registration.php

    <?php
    /**
     * Created by PhpStorm.
     * User: 秋枫雁飞
     * Date: 2019/7/30
     * Time: 11:00
     */
    use \Magento\Framework\Component\ComponentRegistrar;
    ComponentRegistrar::register(ComponentRegistrar::LANGUAGE, 'magento_xx_yy', __DIR__);

    样品language.xml

  6. <?xml version="1.0"?><!--
    /**
     * Copyright © Magento, Inc. All rights reserved.
     * See COPYING.txt for license details.
     */
    -->
    <language xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:noNamespaceSchemaLocation="urn:magento:framework:App/Language/package.xsd">
        <code>xx_YY</code>
        <vendor>examplecorp</vendor>
        <package>xx_yy</package>
    </language>

    修改后执行

  7. php bin/magento cache:clean && php bin/magento setup:static-content:deploy zh_Hans_CN


  8. 温馨提示:

  9. 如果你是composer安装报错,请先卸载,卸载命令:composer remove benheart/magento2_zh_hans_cn

  10. 如果卸载不完全请参考https://bbs.aiweline.com/thread-106.htm,然后拷贝出vender目录下的语言包进行上述修改,放入app/i18n/company/pack;其中,campany是公司名,pack是语言包名。相应替换

  11. 例如app/i18n/Aiweline/magento2_zh_hans_cn-master

原创