elk-zone / elk

A nimble Mastodon web client
https://elk.zone
MIT License
5.42k stars 557 forks source link

Support more languages in "Hide translation" settings #2843

Open shuuji3 opened 5 months ago

shuuji3 commented 5 months ago

Currently, "Hide translation" settings support 30 languages: https://main.elk.zone/settings/language

But Mastodon listed 202 possible "Posting language" used in the post: https://m.webtoo.ls/settings/preferences/other

It seems that this "Posting language" is not necessarily a superset of the supported "Interface language". For example, there is only one English variation (en) in "Posting language" but there are five Chinese variants (zh, zh-CN, zh-HK, zh-TW, zh-YUE). So we'll need to handle "Posting language" and "Interface language" differently.

We can support the remaining 172 languages list for "Hide translation" even if we don't have the corresponding interface languages yet.

For reference, here's the language list created from the Mastodon UI:

[
  {
    "code": "aa",
    "name": "Afaraf"
  },
  {
    "code": "ab",
    "name": "аҧсуа бызшәа"
  },
  {
    "code": "ae",
    "name": "avesta"
  },
  {
    "code": "af",
    "name": "Afrikaans"
  },
  {
    "code": "ak",
    "name": "Akan"
  },
  {
    "code": "am",
    "name": "አማርኛ"
  },
  {
    "code": "an",
    "name": "aragonés"
  },
  {
    "code": "ar",
    "name": "اللغة العربية"
  },
  {
    "code": "as",
    "name": "অসমীয়া"
  },
  {
    "code": "av",
    "name": "авар мацӀ"
  },
  {
    "code": "ay",
    "name": "aymar aru"
  },
  {
    "code": "az",
    "name": "azərbaycan dili"
  },
  {
    "code": "ba",
    "name": "башҡорт теле"
  },
  {
    "code": "be",
    "name": "беларуская мова"
  },
  {
    "code": "bg",
    "name": "български език"
  },
  {
    "code": "bh",
    "name": "भोजपुरी"
  },
  {
    "code": "bi",
    "name": "Bislama"
  },
  {
    "code": "bm",
    "name": "bamanankan"
  },
  {
    "code": "bn",
    "name": "বাংলা"
  },
  {
    "code": "bo",
    "name": "བོད་ཡིག"
  },
  {
    "code": "br",
    "name": "brezhoneg"
  },
  {
    "code": "bs",
    "name": "bosanski jezik"
  },
  {
    "code": "ca",
    "name": "Català"
  },
  {
    "code": "ce",
    "name": "нохчийн мотт"
  },
  {
    "code": "ch",
    "name": "Chamoru"
  },
  {
    "code": "co",
    "name": "corsu"
  },
  {
    "code": "cr",
    "name": "ᓀᐦᐃᔭᐍᐏᐣ"
  },
  {
    "code": "cs",
    "name": "čeština"
  },
  {
    "code": "cu",
    "name": "ѩзыкъ словѣньскъ"
  },
  {
    "code": "cv",
    "name": "чӑваш чӗлхи"
  },
  {
    "code": "cy",
    "name": "Cymraeg"
  },
  {
    "code": "da",
    "name": "dansk"
  },
  {
    "code": "de",
    "name": "Deutsch"
  },
  {
    "code": "dv",
    "name": "Dhivehi"
  },
  {
    "code": "dz",
    "name": "རྫོང་ཁ"
  },
  {
    "code": "ee",
    "name": "Eʋegbe"
  },
  {
    "code": "el",
    "name": "Ελληνικά"
  },
  {
    "code": "en",
    "name": "English"
  },
  {
    "code": "eo",
    "name": "Esperanto"
  },
  {
    "code": "es",
    "name": "Español"
  },
  {
    "code": "et",
    "name": "eesti"
  },
  {
    "code": "eu",
    "name": "euskara"
  },
  {
    "code": "fa",
    "name": "فارسی"
  },
  {
    "code": "ff",
    "name": "Fulfulde"
  },
  {
    "code": "fi",
    "name": "suomi"
  },
  {
    "code": "fj",
    "name": "Vakaviti"
  },
  {
    "code": "fo",
    "name": "føroyskt"
  },
  {
    "code": "fr",
    "name": "Français"
  },
  {
    "code": "fy",
    "name": "Frysk"
  },
  {
    "code": "ga",
    "name": "Gaeilge"
  },
  {
    "code": "gd",
    "name": "Gàidhlig"
  },
  {
    "code": "gl",
    "name": "galego"
  },
  {
    "code": "gu",
    "name": "ગુજરાતી"
  },
  {
    "code": "gv",
    "name": "Gaelg"
  },
  {
    "code": "ha",
    "name": "هَوُسَ"
  },
  {
    "code": "he",
    "name": "עברית"
  },
  {
    "code": "hi",
    "name": "हिन्दी"
  },
  {
    "code": "ho",
    "name": "Hiri Motu"
  },
  {
    "code": "hr",
    "name": "Hrvatski"
  },
  {
    "code": "ht",
    "name": "Kreyòl ayisyen"
  },
  {
    "code": "hu",
    "name": "magyar"
  },
  {
    "code": "hy",
    "name": "Հայերեն"
  },
  {
    "code": "hz",
    "name": "Otjiherero"
  },
  {
    "code": "ia",
    "name": "Interlingua"
  },
  {
    "code": "id",
    "name": "Bahasa Indonesia"
  },
  {
    "code": "ie",
    "name": "Interlingue"
  },
  {
    "code": "ig",
    "name": "Asụsụ Igbo"
  },
  {
    "code": "ii",
    "name": "ꆈꌠ꒿ Nuosuhxop"
  },
  {
    "code": "ik",
    "name": "Iñupiaq"
  },
  {
    "code": "io",
    "name": "Ido"
  },
  {
    "code": "is",
    "name": "Íslenska"
  },
  {
    "code": "it",
    "name": "Italiano"
  },
  {
    "code": "iu",
    "name": "ᐃᓄᒃᑎᑐᑦ"
  },
  {
    "code": "ja",
    "name": "日本語"
  },
  {
    "code": "jv",
    "name": "basa Jawa"
  },
  {
    "code": "ka",
    "name": "ქართული"
  },
  {
    "code": "kg",
    "name": "Kikongo"
  },
  {
    "code": "ki",
    "name": "Gĩkũyũ"
  },
  {
    "code": "kj",
    "name": "Kuanyama"
  },
  {
    "code": "kk",
    "name": "қазақ тілі"
  },
  {
    "code": "kl",
    "name": "kalaallisut"
  },
  {
    "code": "km",
    "name": "ខេមរភាសា"
  },
  {
    "code": "kn",
    "name": "ಕನ್ನಡ"
  },
  {
    "code": "ko",
    "name": "한국어"
  },
  {
    "code": "kr",
    "name": "Kanuri"
  },
  {
    "code": "ks",
    "name": "कश्मीरी"
  },
  {
    "code": "ku",
    "name": "Kurmancî"
  },
  {
    "code": "kv",
    "name": "коми кыв"
  },
  {
    "code": "kw",
    "name": "Kernewek"
  },
  {
    "code": "ky",
    "name": "Кыргызча"
  },
  {
    "code": "la",
    "name": "latine"
  },
  {
    "code": "lb",
    "name": "Lëtzebuergesch"
  },
  {
    "code": "lg",
    "name": "Luganda"
  },
  {
    "code": "li",
    "name": "Limburgs"
  },
  {
    "code": "ln",
    "name": "Lingála"
  },
  {
    "code": "lo",
    "name": "ລາວ"
  },
  {
    "code": "lt",
    "name": "lietuvių kalba"
  },
  {
    "code": "lu",
    "name": "Tshiluba"
  },
  {
    "code": "lv",
    "name": "latviešu valoda"
  },
  {
    "code": "mg",
    "name": "fiteny malagasy"
  },
  {
    "code": "mh",
    "name": "Kajin M̧ajeļ"
  },
  {
    "code": "mi",
    "name": "te reo Māori"
  },
  {
    "code": "mk",
    "name": "македонски јазик"
  },
  {
    "code": "ml",
    "name": "മലയാളം"
  },
  {
    "code": "mn",
    "name": "Монгол хэл"
  },
  {
    "code": "mr",
    "name": "मराठी"
  },
  {
    "code": "ms",
    "name": "Bahasa Melayu"
  },
  {
    "code": "mt",
    "name": "Malti"
  },
  {
    "code": "my",
    "name": "ဗမာစာ"
  },
  {
    "code": "na",
    "name": "Ekakairũ Naoero"
  },
  {
    "code": "nb",
    "name": "Norsk bokmål"
  },
  {
    "code": "nd",
    "name": "isiNdebele"
  },
  {
    "code": "ne",
    "name": "नेपाली"
  },
  {
    "code": "ng",
    "name": "Owambo"
  },
  {
    "code": "nl",
    "name": "Nederlands"
  },
  {
    "code": "nn",
    "name": "Norsk Nynorsk"
  },
  {
    "code": "no",
    "name": "Norsk"
  },
  {
    "code": "nr",
    "name": "isiNdebele"
  },
  {
    "code": "nv",
    "name": "Diné bizaad"
  },
  {
    "code": "ny",
    "name": "chiCheŵa"
  },
  {
    "code": "oc",
    "name": "occitan"
  },
  {
    "code": "oj",
    "name": "ᐊᓂᔑᓈᐯᒧᐎᓐ"
  },
  {
    "code": "om",
    "name": "Afaan Oromoo"
  },
  {
    "code": "or",
    "name": "ଓଡ଼ିଆ"
  },
  {
    "code": "os",
    "name": "ирон æвзаг"
  },
  {
    "code": "pa",
    "name": "ਪੰਜਾਬੀ"
  },
  {
    "code": "pi",
    "name": "पाऴि"
  },
  {
    "code": "pl",
    "name": "Polski"
  },
  {
    "code": "ps",
    "name": "پښتو"
  },
  {
    "code": "pt",
    "name": "Português"
  },
  {
    "code": "qu",
    "name": "Runa Simi"
  },
  {
    "code": "rm",
    "name": "rumantsch grischun"
  },
  {
    "code": "rn",
    "name": "Ikirundi"
  },
  {
    "code": "ro",
    "name": "Română"
  },
  {
    "code": "ru",
    "name": "Русский"
  },
  {
    "code": "rw",
    "name": "Ikinyarwanda"
  },
  {
    "code": "sa",
    "name": "संस्कृतम्"
  },
  {
    "code": "sc",
    "name": "sardu"
  },
  {
    "code": "sd",
    "name": "सिन्धी"
  },
  {
    "code": "se",
    "name": "Davvisámegiella"
  },
  {
    "code": "sg",
    "name": "yângâ tî sängö"
  },
  {
    "code": "si",
    "name": "සිංහල"
  },
  {
    "code": "sk",
    "name": "slovenčina"
  },
  {
    "code": "sl",
    "name": "slovenščina"
  },
  {
    "code": "sn",
    "name": "chiShona"
  },
  {
    "code": "so",
    "name": "Soomaaliga"
  },
  {
    "code": "sq",
    "name": "Shqip"
  },
  {
    "code": "sr",
    "name": "српски језик"
  },
  {
    "code": "ss",
    "name": "SiSwati"
  },
  {
    "code": "st",
    "name": "Sesotho"
  },
  {
    "code": "su",
    "name": "Basa Sunda"
  },
  {
    "code": "sv",
    "name": "Svenska"
  },
  {
    "code": "sw",
    "name": "Kiswahili"
  },
  {
    "code": "ta",
    "name": "தமிழ்"
  },
  {
    "code": "te",
    "name": "తెలుగు"
  },
  {
    "code": "tg",
    "name": "тоҷикӣ"
  },
  {
    "code": "th",
    "name": "ไทย"
  },
  {
    "code": "ti",
    "name": "ትግርኛ"
  },
  {
    "code": "tk",
    "name": "Türkmen"
  },
  {
    "code": "tl",
    "name": "Wikang Tagalog"
  },
  {
    "code": "tn",
    "name": "Setswana"
  },
  {
    "code": "to",
    "name": "faka Tonga"
  },
  {
    "code": "tr",
    "name": "Türkçe"
  },
  {
    "code": "ts",
    "name": "Xitsonga"
  },
  {
    "code": "tt",
    "name": "татар теле"
  },
  {
    "code": "tw",
    "name": "Twi"
  },
  {
    "code": "ty",
    "name": "Reo Tahiti"
  },
  {
    "code": "ug",
    "name": "ئۇيغۇرچە‎"
  },
  {
    "code": "uk",
    "name": "Українська"
  },
  {
    "code": "ur",
    "name": "اردو"
  },
  {
    "code": "uz",
    "name": "Ўзбек"
  },
  {
    "code": "ve",
    "name": "Tshivenḓa"
  },
  {
    "code": "vi",
    "name": "Tiếng Việt"
  },
  {
    "code": "vo",
    "name": "Volapük"
  },
  {
    "code": "wa",
    "name": "walon"
  },
  {
    "code": "wo",
    "name": "Wollof"
  },
  {
    "code": "xh",
    "name": "isiXhosa"
  },
  {
    "code": "yi",
    "name": "ייִדיש"
  },
  {
    "code": "yo",
    "name": "Yorùbá"
  },
  {
    "code": "za",
    "name": "Saɯ cueŋƅ"
  },
  {
    "code": "zh",
    "name": "中文"
  },
  {
    "code": "zu",
    "name": "isiZulu"
  },
  {
    "code": "zh-CN",
    "name": "简体中文"
  },
  {
    "code": "zh-HK",
    "name": "繁體中文(香港)"
  },
  {
    "code": "zh-TW",
    "name": "繁體中文(臺灣)"
  },
  {
    "code": "zh-YUE",
    "name": "廣東話"
  },
  {
    "code": "ast",
    "name": "Asturianu"
  },
  {
    "code": "chr",
    "name": "ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ"
  },
  {
    "code": "ckb",
    "name": "سۆرانی"
  },
  {
    "code": "cnr",
    "name": "crnogorski"
  },
  {
    "code": "jbo",
    "name": "la .lojban."
  },
  {
    "code": "kab",
    "name": "Taqbaylit"
  },
  {
    "code": "ldn",
    "name": "Láadan"
  },
  {
    "code": "lfn",
    "name": "lingua franca nova"
  },
  {
    "code": "sco",
    "name": "Scots"
  },
  {
    "code": "sma",
    "name": "Åarjelsaemien Gïele"
  },
  {
    "code": "smj",
    "name": "Julevsámegiella"
  },
  {
    "code": "szl",
    "name": "ślůnsko godka"
  },
  {
    "code": "tok",
    "name": "toki pona"
  },
  {
    "code": "xal",
    "name": "Хальмг келн"
  },
  {
    "code": "zba",
    "name": "باليبلن"
  },
  {
    "code": "zgh",
    "name": "ⵜⴰⵎⴰⵣⵉⵖⵜ"
  }
]
stackblitz[bot] commented 5 months ago

Solve in StackBlitz Codeflow Start a new pull request in StackBlitz Codeflow.