on 2020-05-25
前言
因為最近在做一些語系的整理
為了字型的關係
就整理了一下一些在數位資訊上面有關於文字與語言的一些規範
這裡會概括了系統與軟體開發與輸入裝置的處理
因為資訊量太廣
所以不一定會有個脈絡
基本上只有大概分一段一段的說明
初心者的誤區
- 國家和語言有很強的關聯
這是很多人一開始處理多國語系都會有個誤解的
常常在系統中看到 en-US
, zh-TW
, ja-jp
就會下意識的把語言和國家綁定在一起
然後結果就是在該國家只能顯示該語言
但現實是每個國家都不一定都只有使用一個語言啊~~
新加坡同時普遍用中文和英文(官方語言是英文)
- 以為在限定的國家或系統才能使用限定的語言
這和上一個很類似, 以為用到某個國家的系統或是使用某個系統設定在某些國家就會限制了語言
這是錯誤的觀念
記住
語言和國家沒絕對關係
語言和國家沒絕對關係
語言和國家沒絕對關係
- 拉丁文就是英文
這後面會提到
- 語言和文字在定義上的有強烈的關係
在廣義的定義下確實如此
但真正探究下去其實不應該這樣說
這後面會提到
- 鍵盤上沒有注音符號還是可以打中文啊
那現在很多鍵盤都沒有倉頡符號
那不就沒辦法用倉頡輸入法了嗎?
來講一下文字
有時大家常常聽到拉丁文這個東西
那麼拉丁文究竟是什麼文字?
相信不少人就會說英文啊
沒錯
但不太正確
英文就是拉丁文字的其中一部分
那拉丁文又是從哪裡來呢?
這又有點牽扯到語言了
現在最廣泛的語系算是印歐語系
而其中的拉丁語系在古歐洲經由羅馬帝國向外發展
所以拉丁字母也就很廣泛的使用(文化侵略的結果)
上面提到英文是拉丁文部分之一
是因為實際上拉丁文不只是 A ~ Z 26 個字母
德文, 法文等也是用拉丁字母
但是這些語言額外多有各種音對應的字母
所以會有所謂的延伸拉丁字母
尖音 | 重音 | 折音 | 分音/德語變音 | 軟音 | 鼻音 | 鼻化元音 | 合字 | 來自盧恩字母 |
---|---|---|---|---|---|---|---|---|
Á É Í Ó Ú Ý | À È Ì Ò Ù | Â Ê Î Ô Û | Ä Ë Ï Ö Ü Ÿ | Ç Ş | Ã Õ Ñ | Ą Ę Į Ų | Æ Œ Ø IJ | Þ |
á é í ó ú ý | à è ì ò ù | â ê î ô û | ä ë ï ö ü ÿ | ç ş | ã õ ñ | ą ę į ų | æ œ ø ij ß | þ |
這邊後面再輸入裝置時會在特別提到
語言與地區規範
文字
也有應用在字型上
字型的 metadata 會跟你說該字型有哪些文字可以用
下圖為 Google 有名的字體 noto 的繁體字型所帶有的資訊
額外補充一下
因為大部分會是用 opentype 的字型
opentype 是微軟和 Adobe 共同開發的, 所以微軟的文件有詳細的介紹
所以這裡也貼一下 metadata 裡面的 table format 介紹
OpenType™ Layout Common Table Formats
可以用以下網站上傳字型檔(必須是 opentype 格式, 即 .otf
, .ttf
, .ttc
) 確認該字型的資訊
語言
普遍使用於各個系統中的語言代碼
底下目前有定義到 ISO 639-6
但是普遍使用的是 639-1 到 639-3
ISO 639-1 列表
國家(地區)
定義國家的代碼
都需要大寫
上述兩者常常以 語言-國家
或 語言_國家
的形式組合在一起
而大多的語言編碼都是基於 BCP 47
language-extlang-script-region-variant-extension-privateuse
- language - 語言
- extlang - 地方語言擴充
- script - 文字
- region - 地區
- variant - 方言 IANA 定義
- extension
- privateuse
大多數的組合會是 language-extlang-region
在其中 RFC 3066 主要定義了用 -
連接
這邊得先提醒
在不同的系統中所採用的規範是略有所不同的
所以必須要清楚在哪些系統平台上是採用哪些規範
以免在程式處理上出現問題
這裡列舉一下常見的系統平台
Web
通常是以 Accept-Language
為判定基礎
以 BCP 47 定義了語系區域的呈現格式
W3C - Language tags in HTML and XML 有具體的說明
比較特別的一點是其實關於 region 並沒有規範強制要大寫
只是因為在 ISO 3166-1 中規定都要大寫
所以約定成俗
Android
開發文件其實就有說明了
也一樣遵循 BCP 47
-
language 使用 ISO 639-2 / ISO 639-3
-
script 使用 ISO 15924-4
-
region 使用 ISO 3166-2 / UN M.49 numeric-3
但是有的人應該會發現為何 toString
後會是
language + "_" + country + "_" + (variant + "_#" | "#") + script + "-" + extensions
這樣的組合
ex: zh_CN_#Hans
因為這是基於 ICU - International Components for Unicode 定義的規則
裡面的 Locale
iOS
由 language 和 locale 組成
language 走 ISO 639-1 / 639-2
locale 走 ISO 3166-1
但是比較特別的是
locale
Locale ID syntax | Examples | Description |
---|---|---|
[language designator] | en, fr | An unspecified region where the language is used. |
[language designator]_[region designator] | en_GB, zh_HK | The language used by and regional preference of the user. |
[language designator]-[script designator] | az-Arab, zh-Hans | An unspecified region where the script is used. |
[language designator]-[script designator]_[region designator] | zh-Hans_HK | The script used by and regional preference of the user. |
這條規則目前沒找到規範
但是文件也提到如果要更詳細的話也是要遵循 BCP 47 的格式定義
Linux
走 POSIX 平台所定義的標準 ISO/IEC 15897
language[_territory[.codeset]][@modifier]
language 用 ISO 639-1
territory 用 ISO 3166-1
Mac OS
一樣走 POSIX 平台所定義的標準 ISO/IEC 15897
Windows
Windowa Vista 之後使用 RFC 4646
<language>-<Script>-<REGION>_<sort order>
來聊一下鍵盤輸入法
鍵盤上面所有的按鍵都是有定義標準的 key code
基本上就是那兩大家 MS 和 Apple 定義出來的
當然還有些按鍵因應各個廠商的需求會自己去定義, 這邊就不討論
所以這就有個問題了
鍵盤到底可不可以打出任何語言的文字?
答案是可以的
而且不分系統
以 Mac 為例
Mac 已經內建了所有語言的輸入法
只要切到該輸入法就可以輸入該語言的文字了
但會發現一個問題
有的文字沒有按鍵可以按
這又要牽扯到一個問題
鍵盤的 layout
有分 ISO, ANSI, JIS
有在用 Mac 外接鍵盤的應該都有看過
Mac 在外接鍵盤時會叫你按左 shift 右邊和右 shift 左邊
之後就會叫你選 layout
ISO 對應歐規(歐洲的國家)
ANSI 對應美規(大部分的國家)
JIS 對應日規(日本)
為何要分這三種 layout 是因為打字區需要的按鍵數量是不一樣的
ISO 需要有延伸拉丁字母
ANSI 只要 A ~ Z
JIS 也有一些獨立使用的按鍵
這些按鍵在系統都是讀得到 key code 的
只是輸入法有沒有對應的輸出而已
所以鍵盤底層的韌體會定義好該按鍵是要送什麼 key code
而判定 key code 是系統和輸入法的工作
所以真正影響的實際上只有鍵盤的 layout 和輸入法會打出什麼
和作業系統設定的語言與國家無關, 也和鍵盤上面的印字無關
結語
在整理字型時, 如果上述的東西需要有大概的了解
這樣對整理字型的使用會是更佳的容易
比較可惜的是我目前沒找到文字與語言對應的表(可能是搜尋的太少了?
所以目前只有針對幾個國家自己做對應表