PHP:存储语言及其本机名称

时间:2017-04-04 03:55:02

标签: php arrays localization

以下是关于在我的网站上显示语言切换器的信息。

我目前在数组中使用语言代码(作为键)和语言名称(作为值),因此可以稍后调用它们并在网站上显示。

array (
    'en' => 'English',
    'fr' => 'French',
    'de' => 'German'
);

我想升级我的编码,以允许每种语言显示在其原生文本中。例如,“英语”也可以用德语写成“Anglais”(法语)和“Englisch”。

所以我的问题是这样做最有效的方法是什么?我会为此构建一个新数组吗?或者我应该使用提供这些语言名称的内置PHP函数?如果需要,从头开始构建是完全正常的,但我需要一些关于阵列构造外观的指导。

谢谢!

4 个答案:

答案 0 :(得分:1)

如果你想做的不仅仅是几个单词,你应该使用gettext() to provide localization

<?php
bindtextdomain("myApp", "./locale");
textdomain("myApp");
$langs = array (
    'en' => _('English'),
    'fr' => _('French'),
    'de' => _('German')
);

然后,您将为上面指定的./locale/目录中的每种语言创建一个消息文件。例如,法国人看起来像这样:

msgid "English"
msgstr "anglais"
msgid "French"
msgstr "français"
msgid "German"
msgid "allemande"

这是一个标准库,不仅用于PHP。有许多程序会扫描您的PHP文件,寻找_("text")并自动创建消息文件。

答案 1 :(得分:0)

我个人使用多维数组以不同的语言存储名称。

类似

$lang = [
   'en' => [
      'en' => 'english',
      'fr' => 'french'
   ],
   'fr' => [
      'en' => 'anglais',
      'fr' => 'francais'
   ],
];

所以你可以通过

来获取名字
echo $lang['fr']['fr'] //francais
echo $lang['fr']['en'] //anglais

如果你开始拥有世界上所有语言但至少可以处理双语,那会很痛苦。

在本土方式上,我没有经验,但您可能希望从查看http://php.net/manual/en/locale.getdisplaylanguage.php开始。

  

返回语言的适当本地化显示名称   inputlocale

长篇小说见http://php.net/manual/en/class.locale.php

答案 2 :(得分:0)

使用此代码

echo Locale::getDisplayLanguage('locale', 'in_locale');

在数组中使用它是这样的:

array (
    'en' => Locale::getDisplayLanguage('en', 'en'),
    'fr' => Locale::getDisplayLanguage('fr', 'fr'),
    'de' => Locale::getDisplayLanguage('de', 'de'),
);

Click here用于php手册。

答案 3 :(得分:0)

基于@Augwa建议在此处使用rinvex/language软件包:

https://github.com/rinvex/language

我已将数据导出到以下数组中:

https://gist.github.com/rafasashi/fd1a08c1b72a54e905b665a35e548509