Localization Zend 2中首选的本地化方法是什么?

Localization Zend 2中首选的本地化方法是什么?,localization,zend-framework2,Localization,Zend Framework2,我正在寻找Zend 2中处理本地化的首选方法的教程,但到目前为止我还没有找到任何。我能找到的最好的解释是,它没有详细解释实现本地化的实际过程(特别是应用程序消息),或者,它是在Zend 2发布之前提出的,现在已经过时了 如果在该页面上给出了一个选项,那么假设我选择GNU Gettext作为翻译格式。在这种情况下,是否有关于本地化ZF2应用程序的教程 或者,例如,我将网站上的页面文本存储在数据库表中 CREATE TABLE `page` ( `id` int(11) NOT NULL AUT

我正在寻找Zend 2中处理本地化的首选方法的教程,但到目前为止我还没有找到任何。我能找到的最好的解释是,它没有详细解释实现本地化的实际过程(特别是应用程序消息),或者,它是在Zend 2发布之前提出的,现在已经过时了

如果在该页面上给出了一个选项,那么假设我选择GNU Gettext作为翻译格式。在这种情况下,是否有关于本地化ZF2应用程序的教程

或者,例如,我将网站上的页面文本存储在数据库表中

CREATE TABLE `page` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  `body` blob,
  `locale` int(11) NOT NULL,
  `creator` int(11) NOT NULL,
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `pagecreatorfk_idx` (`creator`),
CONSTRAINT `pagecreatorfk` FOREIGN KEY (`creator`)
REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

那么,我如何提供本地化消息呢?

好的,对于初学者来说,您需要一个翻译程序,例如

以下是我的设置方式:

在模块文件夹中创建另一个名为“语言”的文件夹

打开module.config.php并添加以下内容:

'translator' => array(
    'translation_file_patterns' => array(
        array(
            'type'        => 'gettext',
            'base_dir'    => __DIR__ . '/../language',
            'pattern'     => '%s.mo',
            'text_domain' => 'account'
        )
    )
)
对我来说,简单的是创建一个language.php文件并添加如下行:

echo _('text_to_translate_here');
配置PoEdit时,您将扫描此文件,该文件将向PoEdit添加翻译id。现在,您可以添加想要显示的真实文本,保存后将输出account.mo和account.po等2个文件。您需要上传到语言文件夹的唯一文件是account.mo

由于我在我的应用程序中都使用翻译,所以我将工厂添加到了我的global.php文件中:

return array(
    'service_manager' => array(
        'factories' => array(
            'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
        )
    )
);
在my view.phtml文件中,我现在可以翻译:

<?php echo $this->translate('text_to_translate_here', 'account'); ?>
现在,您的Submit FormLabels将使用该textdomain,而不是默认的textdomain。这同样适用于任何其他类型的表单对象。只需将formSubmit替换为元素类型


让我知道这是否有帮助,或者我是否遗漏了什么。

好的,对于初学者来说,您需要一个翻译程序,例如

以下是我的设置方式:

在模块文件夹中创建另一个名为“语言”的文件夹

打开module.config.php并添加以下内容:

'translator' => array(
    'translation_file_patterns' => array(
        array(
            'type'        => 'gettext',
            'base_dir'    => __DIR__ . '/../language',
            'pattern'     => '%s.mo',
            'text_domain' => 'account'
        )
    )
)
对我来说,简单的是创建一个language.php文件并添加如下行:

echo _('text_to_translate_here');
配置PoEdit时,您将扫描此文件,该文件将向PoEdit添加翻译id。现在,您可以添加想要显示的真实文本,保存后将输出account.mo和account.po等2个文件。您需要上传到语言文件夹的唯一文件是account.mo

由于我在我的应用程序中都使用翻译,所以我将工厂添加到了我的global.php文件中:

return array(
    'service_manager' => array(
        'factories' => array(
            'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
        )
    )
);
在my view.phtml文件中,我现在可以翻译:

<?php echo $this->translate('text_to_translate_here', 'account'); ?>
现在,您的Submit FormLabels将使用该textdomain,而不是默认的textdomain。这同样适用于任何其他类型的表单对象。只需将formSubmit替换为元素类型


让我知道这是否有帮助,或者我是否遗漏了任何东西。

您能再定义一点本地化吗?例如,您只是想将文本翻译成不同的语言、时间格式、货币格式等。。。不过,我的第一个建议是使用GetText翻译格式,我不会将其存储在数据库中,而是存储在文本文件中,我也会为它们设置缓存。我主要指的是各种消息的翻译,包括表单标签或按钮标题等元素,还包括网站页面的内容,当然,还有日期、时间和货币格式。所讨论的特定站点是一个简单的站点,其中包含一些静态页面,并且可以通过web应用程序本身对其进行编辑。不过,我也希望您能给我一些建议,说明与小型应用程序相比,如何在更大、更复杂的应用程序中实现这一点。您能对本地化进行更详细的定义吗?例如,您只是想将文本翻译成不同的语言、时间格式、货币格式等。。。不过,我的第一个建议是使用GetText翻译格式,我不会将其存储在数据库中,而是存储在文本文件中,我也会为它们设置缓存。我主要指的是各种消息的翻译,包括表单标签或按钮标题等元素,还包括网站页面的内容,当然,还有日期、时间和货币格式。所讨论的特定站点是一个简单的站点,其中包含一些静态页面,并且可以通过web应用程序本身对其进行编辑。尽管我也希望能得到一些关于如何在更大、更复杂的应用程序中实现这一点的建议,与较小的应用程序相比。看看你的答案,唯一不清楚的是如何处理动态文本(用户可编辑的页面内容)。这必须是动态完成的,我想在Gettext的边界之外(是否?),因为站点管理员需要能够以多种语言动态提供和编辑页面可编辑部分的翻译。在Linked.in上可以看到类似概念的一个例子,它提供了不同语言的简历。如果我在本地化页面的静态部分时遇到问题,我会提供一个更新。看看你的答案,唯一不清楚的是如何处理动态文本(用户可编辑的页面内容)。这必须是动态完成的,我想在Gettext的边界之外(是否?),因为站点管理员需要能够以多种语言动态提供和编辑页面可编辑部分的翻译。在Linked.in上可以看到类似概念的一个例子,它提供了不同语言的简历。如果我在本地化页面的静态部分时遇到问题,我将提供更新。