获取 flutter 中所有可用语言的列表

Get a list of all available languages in flutter

我需要在 DropdownButton 中使用所有可用的语言(带有变体,例如“英语(英国)”),我在 flutter SDK 或 dart 内置函数中找不到,所以我结束了抓取 this site,并创建一个包含以下内容的文件lang_list.dart

const LANGLIST = ["Afrikaans","Afrikaans (South Africa)","Arabic","Arabic (U.A.E.)","Arabic (Bahrain)","Arabic (Algeria)","Arabic (Egypt)","Arabic (Iraq)","Arabic (Jordan)","Arabic (Kuwait)","Arabic (Lebanon)","Arabic (Libya)","Arabic (Morocco)","Arabic (Oman)","Arabic (Qatar)","Arabic (Saudi Arabia)","Arabic (Syria)","Arabic (Tunisia)","Arabic (Yemen)","Azeri (Latin)","Azeri (Latin) (Azerbaijan)","Azeri (Cyrillic) (Azerbaijan)","Belarusian","Belarusian (Belarus)","Bulgarian","Bulgarian (Bulgaria)","Bosnian (Bosnia and Herzegovina)","Catalan","Catalan (Spain)","Czech","Czech (Czech Republic)","Welsh","Welsh (United Kingdom)","Danish","Danish (Denmark)","German","German (Austria)","German (Switzerland)","German (Germany)","German (Liechtenstein)","German (Luxembourg)","Divehi","Divehi (Maldives)","Greek","Greek (Greece)","English","English (Australia)","English (Belize)","English (Canada)","English (Caribbean)","English (United Kingdom)","English (Ireland)","English (Jamaica)","English (New Zealand)","English (Republic of the Philippines)","English (Trinidad and Tobago)","English (United States)","English (South Africa)","English (Zimbabwe)","Esperanto","Spanish","Spanish (Argentina)","Spanish (Bolivia)","Spanish (Chile)","Spanish (Colombia)","Spanish (Costa Rica)","Spanish (Dominican Republic)","Spanish (Ecuador)","Spanish (Castilian)","Spanish (Spain)","Spanish (Guatemala)","Spanish (Honduras)","Spanish (Mexico)","Spanish (Nicaragua)","Spanish (Panama)","Spanish (Peru)","Spanish (Puerto Rico)","Spanish (Paraguay)","Spanish (El Salvador)","Spanish (Uruguay)","Spanish (Venezuela)","Estonian","Estonian (Estonia)","Basque","Basque (Spain)","Farsi","Farsi (Iran)","Finnish","Finnish (Finland)","Faroese","Faroese (Faroe Islands)","French","French (Belgium)","French (Canada)","French (Switzerland)","French (France)","French (Luxembourg)","French (Principality of Monaco)","Galician","Galician (Spain)","Gujarati","Gujarati (India)","Hebrew","Hebrew (Israel)","Hindi","Hindi (India)","Croatian","Croatian (Bosnia and Herzegovina)","Croatian (Croatia)","Hungarian","Hungarian (Hungary)","Armenian","Armenian (Armenia)","Indonesian","Indonesian (Indonesia)","Icelandic","Icelandic (Iceland)","Italian","Italian (Switzerland)","Italian (Italy)","Japanese","Japanese (Japan)","Georgian","Georgian (Georgia)","Kazakh","Kazakh (Kazakhstan)","Kannada","Kannada (India)","Korean","Korean (Korea)","Konkani","Konkani (India)","Kyrgyz","Kyrgyz (Kyrgyzstan)","Lithuanian","Lithuanian (Lithuania)","Latvian","Latvian (Latvia)","Maori","Maori (New Zealand)","FYRO Macedonian","FYRO Macedonian (Former Yugoslav Republic of Macedonia)","Mongolian","Mongolian (Mongolia)","Marathi","Marathi (India)","Malay","Malay (Brunei Darussalam)","Malay (Malaysia)","Maltese","Maltese (Malta)","Norwegian (Bokm?l)","Norwegian (Bokm?l) (Norway)","Dutch","Dutch (Belgium)","Dutch (Netherlands)","Norwegian (Nynorsk) (Norway)","Northern Sotho","Northern Sotho (South Africa)","Punjabi","Punjabi (India)","Polish","Polish (Poland)","Pashto","Pashto (Afghanistan)","Portuguese","Portuguese (Brazil)","Portuguese (Portugal)","Quechua","Quechua (Bolivia)","Quechua (Ecuador)","Quechua (Peru)","Romanian","Romanian (Romania)","Russian","Russian (Russia)","Sanskrit","Sanskrit (India)","Sami (Northern)","Sami (Northern) (Finland)","Sami (Skolt) (Finland)","Sami (Inari) (Finland)","Sami (Northern) (Norway)","Sami (Lule) (Norway)","Sami (Southern) (Norway)","Sami (Northern) (Sweden)","Sami (Lule) (Sweden)","Sami (Southern) (Sweden)","Slovak","Slovak (Slovakia)","Slovenian","Slovenian (Slovenia)","Albanian","Albanian (Albania)","Serbian (Latin) (Bosnia and Herzegovina)","Serbian (Cyrillic) (Bosnia and Herzegovina)","Serbian (Latin) (Serbia and Montenegro)","Serbian (Cyrillic) (Serbia and Montenegro)","Swedish","Swedish (Finland)","Swedish (Sweden)","Swahili","Swahili (Kenya)","Syriac","Syriac (Syria)","Tamil","Tamil (India)","Telugu","Telugu (India)","Thai","Thai (Thailand)","Tagalog","Tagalog (Philippines)","Tswana","Tswana (South Africa)","Turkish","Turkish (Turkey)","Tatar","Tatar (Russia)","Tsonga","Ukrainian","Ukrainian (Ukraine)","Urdu","Urdu (Islamic Republic of Pakistan)","Uzbek (Latin)","Uzbek (Latin) (Uzbekistan)","Uzbek (Cyrillic) (Uzbekistan)","Vietnamese","Vietnamese (Viet Nam)","Xhosa","Xhosa (South Africa)","Chinese","Chinese (S)","Chinese (Hong Kong)","Chinese (Macau)","Chinese (Singapore)","Chinese (T)","Zulu","Zulu (South Africa)"];

所以我可以导入其他文件并使用这个列表。

这个实现可以吗? flutter 有没有做同样事情的方法?

Flutter 和 Dart 没有内置此功能。如果此解决方案适合您,我认为它没有问题。

使用 "language_pickers" 包。

https://pub.dev/packages/language_pickers

您可以检索已在 MateralApp 中定义的所有受支持的语言环境。

context.findAncestorWidgetOfExactType<MaterialApp>()?.supportedLocales