petercokes/multilingual-language-list

查找语言名称和代码的对象

1.16.3 2024-03-13 16:51 UTC

This package is auto-updated.

Last update: 2024-08-29 17:03:00 UTC


README

SensioLabsInsight Scrutinizer Code Quality Code Coverage Build Status License

简介

多年来,我参与的大多数项目都产生了多语言网站。在此期间,通常支持的语言数量有所增加,对方言差异重要性的敏感度也有所提高,这些都是好事。

此包的目的是通过一个简单的API,提供行业维护的语言列表,使得管理语言列表(如用于语言下拉框或表单选择字段的列表)变得更加容易。

数据可以返回为查找数组或键值对数组,其中键和值标签可以根据软件消费需求进行设置。

安装

在命令行中运行

composer require petercoles/multilingual-language-list

如果你使用的是Laravel 5.5或更高版本(并且没有禁用包发现),那么你已经完成了。继续下面的使用部分。

如果你使用的是较旧版本的Laravel,那么将服务提供者添加到你的config/app.php文件中的providers条目

    'providers' => [
        // ...
        PeterColes\Languages\LanguagesServiceProvider::class,
        // ...
    ],

还有一个可选的facade可用,可以通过向config/app.php的aliases数组中添加以下内容来启用

'Languages' => PeterColes\Languages\LanguagesFacade::class,

使用方法

安装完成后,该包公开了两个API方法:lookup()和keyValue(),每个方法都返回一个按使用语言的国家名称排序的列表。

查找

lookup方法接受三个可选参数,并返回一个集合。

  • $filter确定要在响应中包含哪些语言。默认为"major",这将导致只返回那些具有两字母代码的语言列表(例如,fr - 法语)。其他选项是"minor",这将添加具有三字母代码的语言(例如,arw - 阿劳坎语)和"all",不推荐使用,将返回所有可能的条目,包括一些方言(例如,es_MX - 墨西哥西班牙语)和构造(例如,es_419 - 拉丁美洲西班牙语)。
  • $locale确定响应将返回的语言和方言。区域可以是语言(例如,fr - 法语)、方言(例如,fr_CA - 加拿大法语)和特殊(例如,bs_Cryl_BA - 波斯尼亚和黑塞哥维那方言的西里尔字母或zh_Hans_HK - 香港方言的简体中文)。它们看起来很像是语言,但更细致,即有更多。
  • $flip用于切换响应数组的键和值,使语言名称成为键,语言代码成为值。

结果集合将由Laravel转换为JSON对象(如果作为响应返回),或者如果需要,可以使用toArray()方法转换为数组。

示例:默认设置

Languages::lookup();

// returns

{
  "ab": "Abkhazian",
  ...
  "zu": "Zulu"
}

示例:限制显示的语言

Languages::lookup(['en', 'fr', 'de']);

// returns

{
  "en": "English",
  "fr": "French",
  "de": "German"
}

示例:更改显示语言

Languages::lookup(['en', 'fr', 'de'], 'fr');

// returns

{
  "de": "allemand",
  "en": "anglais",
  "fr": "français"
}

示例:反向查找

Languages::lookup(['en', 'fr', 'de'], 'fr', true);

// returns

{
  "allemand": "de",
  "anglais": "en",
  "français": "fr"
}

示例:也支持非拉丁字符集

Languages::lookup(['en', 'fr', 'de', 'bs'], 'bs_Cyrl');

// returns

{
  "bs": "босански",
  "en": "енглески",
  "de": "немачки",
  "fr": "француски"
}

keyValue

keyValue方法接受四个可选参数

  • $filter - 默认 "major"。有关完整说明,请参阅查找部分
  • $locale - 默认 "en"。有关完整说明,请参阅查找部分
  • $key - 默认 "key"
  • $value - 默认 "value"

示例:默认设置

Languages::keyValue();

// returns

[
  {"key": "ab", "value": "Abkhazian"},
  {"key": "aa", "value": "Afar"},
  ...
  {"key": "za", "value": "Zhuang"},
  {"key": "zu", "value": "Zulu"}
]

示例:包括 "minor" 语言

Languages::keyValue('minor');

// returns

[
  {"key": "ab", "value": "Abkhazian"},
  {"key": "ace", "value": "Achinese"},
  {"key": "ach", "value": "Acoli"},
  ...
  {"key": "gbz", "value": "Zoroastrian Dari"},
  {"key": "zu", "value": "Zulu"},
  {"key": "zun", "value": "Zuni"}
]

示例:厨房水槽 - 自定义列表,在非拉丁语言中带有自定义索引

Languages::keyValue(['en', 'ja', 'zh'], 'zh', 'label', 'text');

// returns

[
  {"label": "ja", "text": "日文"},
  {"label": "en", "text": "英文"},
  {"label": "zh", "text": "中文"}
]

混合区域

有时你可能需要显示一个语言列表,其中每种语言都使用其自身的语言和书写系统来表示,例如,一个列表中包含法语为“français”,日语为“日本語”,俄语为“русский”。如果需要,我们已为您做好准备。

通过使用特殊的“混合”区域设置作为第二个参数和自定义数组作为第一个参数,该自定义数组中的语言将按照第一个参数给出的顺序以本地化形式渲染。

示例:查找

Languages::lookup(['en', 'fr', 'de', 'ja', 'ru', 'zh'], 'mixed');

// returns

{
  "en": "English",
  "fr": "français",
  "de": "Deutsch",
  "ja": "日本語",
  "ru": "русский",
  "zh": "中文",
}

示例:键值对

Languages::keyValue(['en', 'fr', 'de', 'ja', 'ru', 'zh'], 'mixed');

// returns

[
  {"key" => "en", "value" => "English"},
  {"key" => "fr", "value" => "français"},
  {"key" => "de", "value" => "Deutsch"},
  {"key" => "ja", "value" => "日本語"},
  {"key" => "ru", "value" => "русский"},
  {"key" => "zh", "value" => "中文"}
]

如上所示,混合区域设置参数可用于生成查找或键值对象。$flip, $key 和 $value 参数将继续以与前面章节所示相同的方式为相关列表类型工作。

示例:找到所有可能的混合语言候选人

每个区域文件(目前)包含几乎600个用该区域表示的语言名称。然而,一个区域文件中存在某个语言并不意味着反之亦然,即许多语言没有区域文件,尽管有些语言有多个区域文件。这可能需要一个示例来解释。

除了基本的英语区域文件 en.php 之外,还有许多英语变体的区域文件(实际上超过100个)。每个都包含几乎600种语言的英语名称,其中在不同地区的名称略有不同。每个这些区域的第一种语言是阿布哈兹语。然而,没有阿布哈兹语的区域文件,所以我们不知道阿布哈兹语中的“英语”是什么,甚至不知道阿布哈兹语如何称呼自己,因此不可能将其包括在混合语言列表中。

可用于的语言列表会随时间变化,每次数据更新时都可能发生变化。以下是如何生成当前可行的候选人列表的示例。

首先,获取主要语言数组(没有“次要”语言的区域数据可用)

$languageKeys = Languages::lookup('major')->keys()->toArray();

// returns
['ab', ... 'zu']

然后使用“参数”查找这些语言,这将过滤掉没有区域文件的语言。

$mixedLanguages = Languages::lookup($languageKeys, 'mixed');

// returns

{
  "af": "Afrikaans",
  "ak": "Akan",
  "sq": "shqip",
  "am": "አማርኛ",
  "ar": "العربية",
  "hy": "հայերեն",
  "as": "অসমীয়া",
  ...
  "zu": "isiZulu"
}

然而,需要注意的是,生成这需要大量的文件系统读取,因此我建议您不要每次需要使用该列表时都调用它,而是使用 Laravel 的出色缓存系统来持久化结果以供您的实时系统使用。

如果您没有亲自阅读所有184(当前)候选人语言,并且需要一个您可以理解的语言列表(例如,为了删除晦涩或无关的语言),只需将列表的键反馈到查找方法中,并指定您选择的语言。

Languages::lookup($mixedLanguages->keys()->toArray(), 'fr');

问题

此包的开发是为了满足特定需求,然后为了更广泛的使用而进行了通用化。如果您有当前尚未满足的使用案例,或者看到似乎不正确的工作,请在 github 仓库 中提出问题。

贡献

欢迎贡献,但通常需要测试。我建议首先提出问题,以便在开发开始之前讨论拟议的更改或增强。

许可证

此包根据 MIT 许可证 许可。