2024-09-21 00:13:18 +12:00
|
|
|
|
#nullable disable
|
|
|
|
|
using System.Globalization;
|
|
|
|
|
|
|
|
|
|
namespace EllieBot.Modules.Administration;
|
|
|
|
|
|
|
|
|
|
public partial class Administration
|
|
|
|
|
{
|
|
|
|
|
[Group]
|
|
|
|
|
public partial class LocalizationCommands : EllieModule
|
|
|
|
|
{
|
|
|
|
|
private static readonly IReadOnlyDictionary<string, string> _supportedLocales = new Dictionary<string, string>
|
|
|
|
|
{
|
|
|
|
|
{ "ar", "العربية" },
|
|
|
|
|
{ "zh-TW", "繁體中文, 台灣" },
|
|
|
|
|
{ "zh-CN", "简体中文, 中华人民共和国" },
|
|
|
|
|
{ "nl-NL", "Nederlands, Nederland" },
|
|
|
|
|
{ "en-US", "English, United States" },
|
|
|
|
|
{ "fr-FR", "Français, France" },
|
|
|
|
|
{ "cs-CZ", "Čeština, Česká republika" },
|
|
|
|
|
{ "da-DK", "Dansk, Danmark" },
|
|
|
|
|
{ "de-DE", "Deutsch, Deutschland" },
|
|
|
|
|
{ "he-IL", "עברית, ישראל" },
|
|
|
|
|
{ "hu-HU", "Magyar, Magyarország" },
|
|
|
|
|
{ "id-ID", "Bahasa Indonesia, Indonesia" },
|
|
|
|
|
{ "it-IT", "Italiano, Italia" },
|
|
|
|
|
{ "ja-JP", "日本語, 日本" },
|
|
|
|
|
{ "ko-KR", "한국어, 대한민국" },
|
|
|
|
|
{ "nb-NO", "Norsk, Norge" },
|
|
|
|
|
{ "pl-PL", "Polski, Polska" },
|
|
|
|
|
{ "pt-BR", "Português Brasileiro, Brasil" },
|
|
|
|
|
{ "ro-RO", "Română, România" },
|
|
|
|
|
{ "ru-RU", "Русский, Россия" },
|
|
|
|
|
{ "sr-Cyrl-RS", "Српски, Србија" },
|
|
|
|
|
{ "es-ES", "Español, España" },
|
|
|
|
|
{ "sv-SE", "Svenska, Sverige" },
|
|
|
|
|
{ "tr-TR", "Türkçe, Türkiye" },
|
|
|
|
|
{ "ts-TS", "Tsundere, You Baka" },
|
|
|
|
|
{ "uk-UA", "Українська, Україна" }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
[Cmd]
|
|
|
|
|
[RequireContext(ContextType.Guild)]
|
|
|
|
|
[Priority(0)]
|
|
|
|
|
public async Task LanguageSet()
|
|
|
|
|
=> await Response().Confirm(strs.lang_set_show(Format.Bold(Culture.ToString()),
|
|
|
|
|
Format.Bold(Culture.NativeName))).SendAsync();
|
|
|
|
|
|
|
|
|
|
[Cmd]
|
|
|
|
|
[RequireContext(ContextType.Guild)]
|
|
|
|
|
[UserPerm(GuildPerm.Administrator)]
|
|
|
|
|
[Priority(1)]
|
|
|
|
|
public async Task LanguageSet(string name)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
CultureInfo ci;
|
|
|
|
|
if (name.Trim().ToLowerInvariant() == "default")
|
|
|
|
|
{
|
|
|
|
|
_localization.RemoveGuildCulture(ctx.Guild);
|
|
|
|
|
ci = _localization.DefaultCultureInfo;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ci = new CultureInfo(name);
|
|
|
|
|
if (!_supportedLocales.ContainsKey(ci.Name))
|
|
|
|
|
{
|
|
|
|
|
await LanguagesList();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_localization.SetGuildCulture(ctx.Guild, ci);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var nativeName = ci.NativeName;
|
|
|
|
|
if (ci.Name == "ts-TS")
|
|
|
|
|
nativeName = _supportedLocales[ci.Name];
|
|
|
|
|
await Response().Confirm(strs.lang_set(Format.Bold(ci.ToString()), Format.Bold(nativeName))).SendAsync();
|
|
|
|
|
}
|
|
|
|
|
catch (Exception)
|
|
|
|
|
{
|
|
|
|
|
await Response().Error(strs.lang_set_fail).SendAsync();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Cmd]
|
|
|
|
|
public async Task LanguageSetDefault()
|
|
|
|
|
{
|
|
|
|
|
var cul = _localization.DefaultCultureInfo;
|
|
|
|
|
await Response().Error(strs.lang_set_bot_show(cul, cul.NativeName)).SendAsync();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Cmd]
|
|
|
|
|
[OwnerOnly]
|
|
|
|
|
public async Task LanguageSetDefault(string name)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
CultureInfo ci;
|
|
|
|
|
if (name.Trim().ToLowerInvariant() == "default")
|
|
|
|
|
{
|
|
|
|
|
_localization.ResetDefaultCulture();
|
|
|
|
|
ci = _localization.DefaultCultureInfo;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ci = new CultureInfo(name);
|
|
|
|
|
if (!_supportedLocales.ContainsKey(ci.Name))
|
|
|
|
|
{
|
|
|
|
|
await LanguagesList();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
_localization.SetDefaultCulture(ci);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
await Response().Confirm(strs.lang_set_bot(Format.Bold(ci.ToString()),
|
|
|
|
|
Format.Bold(ci.NativeName))).SendAsync();
|
|
|
|
|
}
|
|
|
|
|
catch (Exception)
|
|
|
|
|
{
|
|
|
|
|
await Response().Error(strs.lang_set_fail).SendAsync();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Cmd]
|
|
|
|
|
public async Task LanguagesList()
|
2024-11-28 01:06:01 +13:00
|
|
|
|
=> await Response().Embed(CreateEmbed()
|
2024-09-21 00:13:18 +12:00
|
|
|
|
.WithOkColor()
|
|
|
|
|
.WithTitle(GetText(strs.lang_list))
|
|
|
|
|
.WithDescription(string.Join("\n",
|
|
|
|
|
_supportedLocales.Select(
|
|
|
|
|
x => $"{Format.Code(x.Key),-10} => {x.Value}")))).SendAsync();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/* list of language codes for reference.
|
|
|
|
|
* taken from https://github.com/dotnet/coreclr/blob/ee5862c6a257e60e263537d975ab6c513179d47f/src/mscorlib/src/System/Globalization/CultureData.cs#L192
|
|
|
|
|
{ "029", "en-029" },
|
|
|
|
|
{ "AE", "ar-AE" },
|
|
|
|
|
{ "AF", "prs-AF" },
|
|
|
|
|
{ "AL", "sq-AL" },
|
|
|
|
|
{ "AM", "hy-AM" },
|
|
|
|
|
{ "AR", "es-AR" },
|
|
|
|
|
{ "AT", "de-AT" },
|
|
|
|
|
{ "AU", "en-AU" },
|
|
|
|
|
{ "AZ", "az-Cyrl-AZ" },
|
|
|
|
|
{ "BA", "bs-Latn-BA" },
|
|
|
|
|
{ "BD", "bn-BD" },
|
|
|
|
|
{ "BE", "nl-BE" },
|
|
|
|
|
{ "BG", "bg-BG" },
|
|
|
|
|
{ "BH", "ar-BH" },
|
|
|
|
|
{ "BN", "ms-BN" },
|
|
|
|
|
{ "BO", "es-BO" },
|
|
|
|
|
{ "BR", "pt-BR" },
|
|
|
|
|
{ "BY", "be-BY" },
|
|
|
|
|
{ "BZ", "en-BZ" },
|
|
|
|
|
{ "CA", "en-CA" },
|
|
|
|
|
{ "CH", "it-CH" },
|
|
|
|
|
{ "CL", "es-CL" },
|
|
|
|
|
{ "CN", "zh-CN" },
|
|
|
|
|
{ "CO", "es-CO" },
|
|
|
|
|
{ "CR", "es-CR" },
|
|
|
|
|
{ "CS", "sr-Cyrl-CS" },
|
|
|
|
|
{ "CZ", "cs-CZ" },
|
|
|
|
|
{ "DE", "de-DE" },
|
|
|
|
|
{ "DK", "da-DK" },
|
|
|
|
|
{ "DO", "es-DO" },
|
|
|
|
|
{ "DZ", "ar-DZ" },
|
|
|
|
|
{ "EC", "es-EC" },
|
|
|
|
|
{ "EE", "et-EE" },
|
|
|
|
|
{ "EG", "ar-EG" },
|
|
|
|
|
{ "ES", "es-ES" },
|
|
|
|
|
{ "ET", "am-ET" },
|
|
|
|
|
{ "FI", "fi-FI" },
|
|
|
|
|
{ "FO", "fo-FO" },
|
|
|
|
|
{ "FR", "fr-FR" },
|
|
|
|
|
{ "GB", "en-GB" },
|
|
|
|
|
{ "GE", "ka-GE" },
|
|
|
|
|
{ "GL", "kl-GL" },
|
|
|
|
|
{ "GR", "el-GR" },
|
|
|
|
|
{ "GT", "es-GT" },
|
|
|
|
|
{ "HK", "zh-HK" },
|
|
|
|
|
{ "HN", "es-HN" },
|
|
|
|
|
{ "HR", "hr-HR" },
|
|
|
|
|
{ "HU", "hu-HU" },
|
|
|
|
|
{ "ID", "id-ID" },
|
|
|
|
|
{ "IE", "en-IE" },
|
|
|
|
|
{ "IL", "he-IL" },
|
|
|
|
|
{ "IN", "hi-IN" },
|
|
|
|
|
{ "IQ", "ar-IQ" },
|
|
|
|
|
{ "IR", "fa-IR" },
|
|
|
|
|
{ "IS", "is-IS" },
|
|
|
|
|
{ "IT", "it-IT" },
|
|
|
|
|
{ "IV", "" },
|
|
|
|
|
{ "JM", "en-JM" },
|
|
|
|
|
{ "JO", "ar-JO" },
|
|
|
|
|
{ "JP", "ja-JP" },
|
|
|
|
|
{ "KE", "sw-KE" },
|
|
|
|
|
{ "KG", "ky-KG" },
|
|
|
|
|
{ "KH", "km-KH" },
|
|
|
|
|
{ "KR", "ko-KR" },
|
|
|
|
|
{ "KW", "ar-KW" },
|
|
|
|
|
{ "KZ", "kk-KZ" },
|
|
|
|
|
{ "LA", "lo-LA" },
|
|
|
|
|
{ "LB", "ar-LB" },
|
|
|
|
|
{ "LI", "de-LI" },
|
|
|
|
|
{ "LK", "si-LK" },
|
|
|
|
|
{ "LT", "lt-LT" },
|
|
|
|
|
{ "LU", "lb-LU" },
|
|
|
|
|
{ "LV", "lv-LV" },
|
|
|
|
|
{ "LY", "ar-LY" },
|
|
|
|
|
{ "MA", "ar-MA" },
|
|
|
|
|
{ "MC", "fr-MC" },
|
|
|
|
|
{ "ME", "sr-Latn-ME" },
|
|
|
|
|
{ "MK", "mk-MK" },
|
|
|
|
|
{ "MN", "mn-MN" },
|
|
|
|
|
{ "MO", "zh-MO" },
|
|
|
|
|
{ "MT", "mt-MT" },
|
|
|
|
|
{ "MV", "dv-MV" },
|
|
|
|
|
{ "MX", "es-MX" },
|
|
|
|
|
{ "MY", "ms-MY" },
|
|
|
|
|
{ "NG", "ig-NG" },
|
|
|
|
|
{ "NI", "es-NI" },
|
|
|
|
|
{ "NL", "nl-NL" },
|
|
|
|
|
{ "NO", "nn-NO" },
|
|
|
|
|
{ "NP", "ne-NP" },
|
|
|
|
|
{ "NZ", "en-NZ" },
|
|
|
|
|
{ "OM", "ar-OM" },
|
|
|
|
|
{ "PA", "es-PA" },
|
|
|
|
|
{ "PE", "es-PE" },
|
|
|
|
|
{ "PH", "en-PH" },
|
|
|
|
|
{ "PK", "ur-PK" },
|
|
|
|
|
{ "PL", "pl-PL" },
|
|
|
|
|
{ "PR", "es-PR" },
|
|
|
|
|
{ "PT", "pt-PT" },
|
|
|
|
|
{ "PY", "es-PY" },
|
|
|
|
|
{ "QA", "ar-QA" },
|
|
|
|
|
{ "RO", "ro-RO" },
|
|
|
|
|
{ "RS", "sr-Latn-RS" },
|
|
|
|
|
{ "RU", "ru-RU" },
|
|
|
|
|
{ "RW", "rw-RW" },
|
|
|
|
|
{ "SA", "ar-SA" },
|
|
|
|
|
{ "SE", "sv-SE" },
|
|
|
|
|
{ "SG", "zh-SG" },
|
|
|
|
|
{ "SI", "sl-SI" },
|
|
|
|
|
{ "SK", "sk-SK" },
|
|
|
|
|
{ "SN", "wo-SN" },
|
|
|
|
|
{ "SV", "es-SV" },
|
|
|
|
|
{ "SY", "ar-SY" },
|
|
|
|
|
{ "TH", "th-TH" },
|
|
|
|
|
{ "TJ", "tg-Cyrl-TJ" },
|
|
|
|
|
{ "TM", "tk-TM" },
|
|
|
|
|
{ "TN", "ar-TN" },
|
|
|
|
|
{ "TR", "tr-TR" },
|
|
|
|
|
{ "TT", "en-TT" },
|
|
|
|
|
{ "TW", "zh-TW" },
|
|
|
|
|
{ "UA", "uk-UA" },
|
|
|
|
|
{ "US", "en-US" },
|
|
|
|
|
{ "UY", "es-UY" },
|
|
|
|
|
{ "UZ", "uz-Cyrl-UZ" },
|
|
|
|
|
{ "VE", "es-VE" },
|
|
|
|
|
{ "VN", "vi-VN" },
|
|
|
|
|
{ "YE", "ar-YE" },
|
|
|
|
|
{ "ZA", "af-ZA" },
|
|
|
|
|
{ "ZW", "en-ZW" }
|
|
|
|
|
*/
|