Files
memex/0_inbox/Scrivener_Emacs_Vim/elpa/rw-language-and-country-codes-0.1/rw-language-and-country-codes.el

558 lines
14 KiB
EmacsLisp

;;; rw-language-and-country-codes.el --- Language & Country Codes
;;
;; Copyright (C) 2009 Ralf Wachinger
;;
;; Author: Ralf Wachinger <rwachinger@gmx.de>
;; Version: 0.1
;; Keywords: language
;; Compatibility: GNU Emacs 22.x, GNU Emacs 23.x
;;
;; This file is NOT part of GNU Emacs.
;;
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License
;; as published by the Free Software Foundation; either version 2
;; of the License, or (at your option) any later version.
;;
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;
;;; Commentary:
;;
;; Language and country codes with two (or three) letters,
;; and functions, which return the full language and country names.
;;
;;; Change Log:
;;
;; 2009-03-20 (0.1)
;; Initial Release.
;;
;;; Code:
;; Language codes
;; http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
(defconst rw-lacc-language-codes
'(("aa" . "Afar")
("ab" . "Abkhazian")
("ae" . "Avestan")
("af" . "Afrikaans")
("ak" . "Akan")
("am" . "Amharic")
("an" . "Aragonese")
("ar" . "Arabic")
("as" . "Assamese")
("av" . "Avaric")
("ay" . "Aymara")
("az" . "Azerbaijani")
("ba" . "Bashkir")
("be" . "Belarusian")
("bg" . "Bulgarian")
("bh" . "Bihari")
("bi" . "Bislama")
("bm" . "Bambara")
("bn" . "Bengali")
("bo" . "Tibetan")
("br" . "Breton")
("bs" . "Bosnian")
("ca" . "Catalan")
("ce" . "Chechen")
("ch" . "Chamorro")
("co" . "Corsican")
("cr" . "Cree")
("cs" . "Czech")
("cu" . "Church Slavic")
("cv" . "Chuvash")
("cy" . "Welsh")
("da" . "Danish")
("de" . "German")
("dv" . "Divehi")
("dz" . "Dzongkha")
("ee" . "Ewe")
("el" . "Greek")
("en" . "English")
("eo" . "Esperanto")
("es" . "Spanish")
("et" . "Estonian")
("eu" . "Basque")
("fa" . "Persian")
("ff" . "Fulfulde")
("fi" . "Finnish")
("fj" . "Fijian")
("fo" . "Faroese")
("fr" . "French")
("fy" . "Western Frisian")
("ga" . "Irish")
("gd" . "Scottish Gaelic")
("gl" . "Galician")
("gn" . "Guaraný")
("gu" . "Gujarati")
("gv" . "Manx")
("ha" . "Hausa")
("he" . "Hebrew")
("hi" . "Hindi")
("ho" . "Hiri Motu")
("hr" . "Croatian")
("ht" . "Haitian")
("hu" . "Hungarian")
("hy" . "Armenian")
("hz" . "Herero")
("ia" . "Interlingua")
("id" . "Indonesian")
("ie" . "Interlingue")
("ig" . "Igbo")
("ii" . "Sichuan Yi")
("ik" . "Inupiaq")
("io" . "Ido")
("is" . "Icelandic")
("it" . "Italian")
("iu" . "Inuktitut")
("ja" . "Japanese")
("jv" . "Javanese")
("ka" . "Georgian")
("kg" . "Kongo")
("ki" . "Kikuyu")
("kj" . "Kwanyama")
("kk" . "Kazakh")
("kl" . "Kalaallisut")
("km" . "Khmer")
("kn" . "Kannada")
("ko" . "Korean")
("kr" . "Kanuri")
("ks" . "Kashmiri")
("ku" . "Kurdish")
("kv" . "Komi")
("kw" . "Cornish")
("ky" . "Kirghiz")
("la" . "Latin")
("lb" . "Luxembourgish")
("lg" . "Ganda")
("li" . "Limburgish")
("ln" . "Lingala")
("lo" . "Lao")
("lt" . "Lithuanian")
("lu" . "Luba-Katanga")
("lv" . "Latvian")
("mg" . "Malagasy")
("mh" . "Marshallese")
("mi" . "Maori")
("mk" . "Macedonian")
("ml" . "Malayalam")
("mn" . "Monglian")
("mr" . "Marathi")
("ms" . "Malay")
("mt" . "Maltese")
("my" . "Burmese")
("na" . "Nauru")
("nb" . "Norwegian Bokmýl")
("nd" . "North Ndebele")
("ne" . "Nepali")
("ng" . "Owambo")
("nl" . "Dutch")
("nn" . "Norwegian Nynorsk")
("no" . "Norwegian")
("nr" . "South Ndebele")
("nv" . "Navajo")
("ny" . "Chichewa")
("oc" . "Occitan")
("oj" . "Ojibwa")
("om" . "Oromo")
("or" . "Oriya")
("os" . "Ossetian")
("pa" . "Panjabi")
("pi" . "Pali")
("pl" . "Polish")
("ps" . "Pashto")
("pt" . "Portuguese")
("qu" . "Quechua")
("rm" . "Raeto-Romance")
("rn" . "Kirundi")
("ro" . "Romanian")
("ru" . "Russian")
("rw" . "Kinyarwanda")
("sa" . "Sanskrit")
("sc" . "Sardinian")
("sd" . "Sindhi")
("se" . "Northern Sami")
("sg" . "Sango")
("sh" . "Serbo-Croatian")
("si" . "Sinhala")
("sk" . "Slovak")
("sl" . "Slovenian")
("sm" . "Samoan")
("sn" . "Shona")
("so" . "Somali")
("sq" . "Albanian")
("sr" . "Serbian")
("ss" . "Swati")
("st" . "Southern Sotho")
("su" . "Sundanese")
("sv" . "Swedish")
("sw" . "Swahili")
("ta" . "Tamil")
("te" . "Telugu")
("tg" . "Tajik")
("th" . "Thai")
("ti" . "Tigrinya")
("tk" . "Turkmen")
("tl" . "Tagalog")
("tn" . "Tswana")
("to" . "Tonga")
("tr" . "Turkish")
("ts" . "Tsonga")
("tt" . "Tatar")
("tw" . "Twi")
("ty" . "Tahitian")
("ug" . "Uighur")
("uk" . "Ukrainian")
("ur" . "Urdu")
("uz" . "Uzbek")
("ve" . "Venda")
("vi" . "Vietnamese")
("vo" . "Volapýk")
("wa" . "Walloon")
("wo" . "Wolof")
("xh" . "Xhosa")
("yi" . "Yiddish")
("yo" . "Yoruba")
("za" . "Zhuang")
("zh" . "Chinese")
("zu" . "Zulu")))
;; Country codes
;; http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
(defconst rw-lacc-country-codes
'(("AD" . "Andorra")
("AE" . "United Arab Emirates")
("AF" . "Afghanistan")
("AG" . "Antigua and Barbuda")
("AI" . "Anguilla")
("AL" . "Albania")
("AM" . "Armenia")
("AN" . "Netherlands Antilles")
("AO" . "Angola")
("AQ" . "Antarctica")
("AR" . "Argentina")
("AS" . "American Samoa")
("AT" . "Austria")
("AU" . "Australia")
("AW" . "Aruba")
("AX" . "ýland Islands")
("AZ" . "Azerbaijan")
("BA" . "Bosnia and Herzegovina")
("BB" . "Barbados")
("BD" . "Bangladesh")
("BE" . "Belgium")
("BF" . "Burkina Faso")
("BG" . "Bulgaria")
("BH" . "Bahrain")
("BI" . "Burundi")
("BJ" . "Benin")
("BL" . "Saint Barthýlemy")
("BM" . "Bermuda")
("BN" . "Brunei")
("BO" . "Bolivia")
("BR" . "Brazil")
("BS" . "Bahamas")
("BT" . "Bhutan")
("BV" . "Bouvet Island")
("BW" . "Botswana")
("BY" . "Belarus")
("BZ" . "Belize")
("CA" . "Canada")
("CC" . "Cocos (Keeling) Islands")
("CD" . "Democratic Republic of the Congo")
("CF" . "Central African Republic")
("CG" . "Republic of the Congo")
("CH" . "Switzerland")
("CI" . "Cýte d'Ivoire")
("CK" . "Cook Islands")
("CL" . "Chile")
("CM" . "Cameroon")
("CN" . "China")
("CO" . "Colombia")
("CR" . "Costa Rica")
("CU" . "Cuba")
("CV" . "Cape Verde")
("CX" . "Christmas Island")
("CY" . "Cyprus")
("CZ" . "Czech Republic")
("DE" . "Germany")
("DJ" . "Djibouti")
("DK" . "Denmark")
("DM" . "Dominica")
("DO" . "Dominican Republic")
("DZ" . "Algeria")
("EC" . "Ecuador")
("EE" . "Estonia")
("EG" . "Egypt")
("EH" . "Western Sahara")
("ER" . "Eritrea")
("ES" . "Spain")
("ET" . "Ethiopia")
("FI" . "Finland")
("FJ" . "Fiji")
("FK" . "Falkland Islands")
("FM" . "Federated States of Micronesia")
("FO" . "Faroe Islands")
("FR" . "France")
("GA" . "Gabon")
("GB" . "United Kingdom")
("GD" . "Grenada")
("GE" . "Georgia")
("GF" . "French Guiana")
("GG" . "Guernsey")
("GH" . "Ghana")
("GI" . "Gibraltar")
("GL" . "Greenland")
("GM" . "Gambia")
("GN" . "Guinea")
("GP" . "Guadeloupe")
("GQ" . "Equatorial Guinea")
("GR" . "Greece")
("GS" . "South Georgia and the South Sandwich Islands")
("GT" . "Guatemala")
("GU" . "Guam")
("GW" . "Guinea-Bissau")
("GY" . "Guyana")
("HK" . "Hong Kong")
("HM" . "Heard Island and McDonald Islands")
("HN" . "Honduras")
("HR" . "Croatia")
("HT" . "Haiti")
("HU" . "Hungary")
("ID" . "Indonesia")
("IE" . "Ireland")
("IL" . "Israel")
("IM" . "Isle of Man")
("IN" . "India")
("IO" . "British Indian Ocean Territory")
("IQ" . "Iraq")
("IR" . "Iran")
("IS" . "Iceland")
("IT" . "Italy")
("JE" . "Jersey")
("JM" . "Jamaica")
("JO" . "Jordan")
("JP" . "Japan")
("KE" . "Kenya")
("KG" . "Kyrgyzstan")
("KH" . "Cambodia")
("KI" . "Kiribati")
("KM" . "Comoros")
("KN" . "Saint Kitts and Nevis")
("KP" . "North Korea")
("KR" . "South Korea")
("KW" . "Kuwait")
("KY" . "Cayman Islands")
("KZ" . "Kazakhstan")
("LA" . "Laos")
("LB" . "Lebanon")
("LC" . "Saint Lucia")
("LI" . "Liechtenstein")
("LK" . "Sri Lanka")
("LR" . "Liberia")
("LS" . "Lesotho")
("LT" . "Lithuania")
("LU" . "Luxembourg")
("LV" . "Latvia")
("LY" . "Libya")
("MA" . "Morocco")
("MC" . "Monaco")
("MD" . "Moldova")
("ME" . "Montenegro")
("MF" . "Saint Martin")
("MG" . "Madagascar")
("MH" . "Marshall Islands")
("MK" . "Macedonia")
("ML" . "Mali")
("MM" . "Burma/Myanmar")
("MN" . "Mongolia")
("MO" . "Macao")
("MP" . "Northern Mariana Islands")
("MQ" . "Martinique")
("MR" . "Mauritania")
("MS" . "Montserrat")
("MT" . "Malta")
("MU" . "Mauritius")
("MV" . "Maldives")
("MW" . "Malawi")
("MX" . "Mexico")
("MY" . "Malaysia")
("MZ" . "Mozambique")
("NA" . "Namibia")
("NC" . "New Caledonia")
("NE" . "Niger")
("NF" . "Norfolk Island")
("NG" . "Nigeria")
("NI" . "Nicaragua")
("NL" . "Netherlands")
("NO" . "Norway")
("NP" . "Nepal")
("NR" . "Nauru")
("NU" . "Niue")
("NZ" . "New Zealand")
("OM" . "Oman")
("PA" . "Panama")
("PE" . "Peru")
("PF" . "French Polynesia")
("PG" . "Papua New Guinea")
("PH" . "Philippines")
("PK" . "Pakistan")
("PL" . "Poland")
("PM" . "Saint Pierre and Miquelon")
("PN" . "Pitcairn Islands")
("PR" . "Puerto Rico")
("PS" . "Palestinian territories")
("PT" . "Portugal")
("PW" . "Palau")
("PY" . "Paraguay")
("QA" . "Qatar")
("RE" . "Rýunion")
("RO" . "Romania")
("RS" . "Serbia")
("RU" . "Russia")
("RW" . "Rwanda")
("SA" . "Saudi Arabia")
("SB" . "Solomon Islands")
("SC" . "Seychelles")
("SD" . "Sudan")
("SE" . "Sweden")
("SG" . "Singapore")
("SH" . "Saint Helena")
("SI" . "Slovenia")
("SJ" . "Svalbard and Jan Mayen")
("SK" . "Slovakia")
("SL" . "Sierra Leone")
("SM" . "San Marino")
("SN" . "Senegal")
("SO" . "Somalia")
("SR" . "Suriname")
("ST" . "Sýo Tomý and Prýncipe")
("SV" . "El Salvador")
("SY" . "Syria")
("SZ" . "Swaziland")
("TC" . "Turks and Caicos Islands")
("TD" . "Chad")
("TF" . "French Southern Territories")
("TG" . "Togo")
("TH" . "Thailand")
("TJ" . "Tajikistan")
("TK" . "Tokelau")
("TL" . "East Timor")
("TM" . "Turkmenistan")
("TN" . "Tunisia")
("TO" . "Tonga")
("TR" . "Turkey")
("TT" . "Trinidad and Tobago")
("TV" . "Tuvalu")
("TW" . "Taiwan")
("TZ" . "Tanzania")
("UA" . "Ukraine")
("UG" . "Uganda")
("UM" . "United States Minor Outlying Islands")
("US" . "United States")
("UY" . "Uruguay")
("UZ" . "Uzbekistan")
("VA" . "Vatican City State")
("VC" . "Saint Vincent and the Grenadines")
("VE" . "Venezuela")
("VG" . "British Virgin Islands")
("VI" . "Virgin Islands, U.S.")
("VN" . "Vietnam")
("VU" . "Vanuatu")
("WF" . "Wallis and Futuna")
("WS" . "Samoa")
("YE" . "Yemen")
("YT" . "Mayotte")
("ZA" . "South Africa")
("ZM" . "Zambia")
("ZW" . "Zimbabwe")
("AC" . "Ascension Island")
("CP" . "Clipperton Island")
("DG" . "Diego Garcia")
("EA" . "Ceuta")
("EU" . "European Union")
("FX" . "Metropolitan France")
("IC" . "Canary Islands")
("SU" . "Soviet Union")
("TA" . "Tristan da Cunha")
("UK" . "United Kingdom")
("BU" . "Burma")
("CS" . "Serbia and Montenegro")
("NT" . "Saudi-Iraqi neutral zone")
("SF" . "Finland")
("TP" . "East Timor")
("YU" . "Yugoslavia")
("ZR" . "Zaire")
("DY" . "Benin")
("EW" . "Estonia")
("FL" . "Liechtenstein")
("JA" . "Jamaica")
("LF" . "Libya Fezzan")
("PI" . "Philippines")
("RA" . "Argentina")
("RB" . "Bolivia")
("RC" . "China")
("RH" . "Haiti")
("RI" . "Indonesia")
("RL" . "Lebanon")
("RM" . "Madagascar")
("RN" . "Niger")
("RP" . "Philippines")
("WG" . "Grenada")
("WL" . "Saint Lucia")
("WV" . "Saint Vincent and the Grenadines")
("YV" . "Venezuela")))
(defun rw-lacc-get-language (language-code)
"Get language code from string, e. g. \"en\"."
(if (string-match "^[a-z][a-z][a-z]?$" language-code)
(downcase (or (cdr (assoc-string language-code
rw-lacc-language-codes))
language-code))
language-code))
(defun rw-lacc-get-country (country-code)
"Get country code from string, e. g. \"US\"."
(if (string-match "^[A-Z][A-Z][A-Z]?$" country-code)
(or (cdr (assoc-string country-code
rw-lacc-country-codes))
country-code)
country-code))
(defun rw-lacc-get-language-and-country (language-and-country-code)
"Get language and country code from string, e. g. \"en_US\" or \"en-US\"."
(if (string-match "\\(^[a-z][a-z][a-z]?\\)\\([_-]\\)\\([A-Z][A-Z][A-Z]?\\)$"
language-and-country-code)
(let ((language (match-string 1 language-and-country-code))
(separator (match-string 2 language-and-country-code))
(country (match-string 3 language-and-country-code)))
(concat (rw-lacc-get-language language)
separator
(rw-lacc-get-country country)))
language-and-country-code))
(defun rw-lacc-replace-code-in-string (string)
"Replace language and country code in STRING,
e. g. \"en_US\" to \"english_United States\".
Return a new string containing the replacements."
(replace-regexp-in-string
"[a-z][a-z][a-z]?[_-][A-Z][A-Z][A-Z]?"
'(lambda (str)
(save-match-data (rw-lacc-get-language-and-country str)))
string))
(provide 'rw-language-and-country-codes)
;;; rw-language-and-country-codes.el ends here.