mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-05 08:25:32 +00:00
1. Copy help.keyman.com/developer/17.0/* into /developer/docs/help 2. Update references to 18.0 where appropriate 3. Copy all referenced images from /cdn/dev into /developer/docs/help/images and update links in documentation Next commit: add deployment to help-keyman-com.sh. Note: simplest way to test links at this point is to use the help.keyman.com auto deploy and wait for the PR on help.keyman.com to be validated; we could look at an internal link validation tool that verifies markdown links? Relates-to: #12347
113 lines
4.9 KiB
Markdown
113 lines
4.9 KiB
Markdown
---
|
|
title: BCP 47 language tags
|
|
---
|
|
|
|
Packages and lexical models may reference a [BCP 47 language tag][1]. A BCP
|
|
47 tag is a standard way of referencing a language, used widely in the computer
|
|
industry. Keyman uses BCP 47 tags in a number of areas, including:
|
|
|
|
* providing language metadata about installed keyboards to the operating system
|
|
and to applications, so that, for example, spell checking has the correct
|
|
language, through [package metadata](../guides/distribute/)
|
|
* [linking lexical models to keyboard layouts](../guides/lexical-models/)
|
|
* facilitating searches for keyboards and lexical models on the Keyman site,
|
|
through a [.keyboard_info file](/developer/cloud/keyboard_info)
|
|
|
|
A BCP 47 language tag is made up of multiple subtags. There are many possible
|
|
subtags, but only three types are currently used in most places in Keyman
|
|
Developer:
|
|
|
|
* [language subtag](#toc-the-language-subtag)
|
|
* [script subtag](#toc-the-script-subtag)
|
|
* [region subtag](#toc-the-region-subtag)
|
|
|
|
BCP 47 tags are case insensitive, but there are conventions for casing which you
|
|
should use for readability; see the subtag descriptions for details.
|
|
|
|
The following are all examples of valid BCP 47 tags:
|
|
|
|
* `en`: English
|
|
* `en-US`: English, in United States
|
|
* `km-Khmr-KH`: Khmer, written in the Khmer script, in Cambodia
|
|
* `km-fonipa`: Khmer, transcribed in IPA
|
|
|
|
### The language subtag
|
|
|
|
The only required option is the Language subtag, which is an [ISO 639-1][2] or
|
|
[ISO 639-3][3] code.
|
|
|
|
ISO 639-1 tags are a two-letter code. ISO 639-3 tags are a three-letter code.
|
|
First, try to find your language on the list of two-letter ISO 639-1 codes.
|
|
[This Wikipedia page][4] lists all of the two-letter codes.
|
|
|
|
If you can't find a two-letter code, you'll need to find the closest
|
|
three-letter code. You can use [Glottolog][5] to search for your language, and
|
|
it will give you an appropriate code. In this example, I searched Glottolog for
|
|
“[Saanich][6]” (name of the First Nations that speak SENĆOŦEN) and found `str`
|
|
as the code for all Straits Salish languages.
|
|
|
|
The Language subtag is conventionally written in lower case.
|
|
|
|
The next two subtags are **optional**, however, they allow you to be more
|
|
specific about your language.
|
|
|
|
### The script subtag
|
|
|
|
The Script subtag allows you to specify the writing system used in your language
|
|
model or keyboard. If your language only uses one writing system, omit the
|
|
Script subtag.
|
|
|
|
Otherwise, in cases where a language can be written in many different writing
|
|
systems, you can choose the four letter [ISO 15924][7] script tag that your
|
|
keyboard or lexical model produces.
|
|
|
|
For example, Plains Cree can either be written in _standard Roman orthography_,
|
|
a **Latin** derived script, or it can be written in _syllabics_, which is part
|
|
of the **Canadian Aboriginal syllabics** family of writing systems. If I wrote a
|
|
keyboard or lexical model that produced syllabics, I would choose `Cans`, as
|
|
that is the **ISO 15924** tag for Canadian Aboriginal syllabics.
|
|
|
|
The Script subtag is conventionally written in title case - first letter
|
|
capitalized.
|
|
|
|
### The region subtag
|
|
|
|
The Region subtag allows you to specify the region your language or dialect is
|
|
spoken in. If your language is only spoken in one region, omit the Region
|
|
subtag.
|
|
|
|
Otherwise, some languages vary between different regions and countries. In our
|
|
example, SENĆOŦEN describes the language that covers entire W̱SÁNEĆ region, so
|
|
this field may be left blank.
|
|
|
|
However, large languages, like English, Spanish, or French have quite different
|
|
vocabulary and even different grammatical rules from region to region and
|
|
country to country. For example, the variety of Spanish spoken in Spain
|
|
regularly uses words that are uncommon or even vulgar in both in Mexico, and in
|
|
Latin America. Additionally, regions may have vocabulary that doesn't exist in
|
|
the other regions where the language is spoken.
|
|
|
|
If I were working with a language specific to one country, I would use the [ISO
|
|
3166-1 alpha-2][8] country code for the region subtag. For example, `ES` for
|
|
Spain or `MX` for Mexico.
|
|
|
|
However, if I were working with Latin American Spanish (a group of countries), I
|
|
would need to specify Latin America's [UN M49][9] region code. For Latin
|
|
America, its code is `419`. My lexical model would not suggest words that are
|
|
common in Spain, but vulgar in Latin America, however it would predict words
|
|
like "pupupsas" and "chuchitos", which are words that are uncommon in both Spain
|
|
and Mexico.
|
|
|
|
Another common UN M49 region code is `001` for the whole world.
|
|
|
|
Alphabetic region subtags are conventionally written in upper case.
|
|
|
|
[1]: https://en.wikipedia.org/wiki/IETF_language_tag
|
|
[2]: https://en.wikipedia.org/wiki/ISO_639-1
|
|
[3]: https://en.wikipedia.org/wiki/ISO_639-3
|
|
[4]: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
|
|
[5]: https://glottolog.org/glottolog/language
|
|
[6]: https://glottolog.org/resource/languoid/id/saan1246
|
|
[7]: https://en.wikipedia.org/wiki/ISO_15924
|
|
[8]: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
|
|
[9]: https://en.wikipedia.org/wiki/UN_M49
|