mirror of
https://github.com/jayfunc/BetterLyrics.git
synced 2026-01-12 10:54:55 +08:00
chores: i18n
This commit is contained in:
@@ -74,6 +74,7 @@ namespace BetterLyrics.WinUI3
|
||||
await InitializeLocalizer();
|
||||
|
||||
var settingsService = Ioc.Default.GetRequiredService<ISettingsService>();
|
||||
settingsService.UpdateLanguage();
|
||||
|
||||
WindowHook.OpenOrShowWindow<SystemTrayWindow>();
|
||||
|
||||
@@ -150,21 +151,14 @@ namespace BetterLyrics.WinUI3
|
||||
{
|
||||
// Initialize a "Strings" folder in the "LocalFolder" for the packaged app.
|
||||
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
|
||||
StorageFolder stringsFolder = await localFolder.CreateFolderAsync(
|
||||
"Strings",
|
||||
CreationCollisionOption.OpenIfExists);
|
||||
StorageFolder stringsFolder = await localFolder.CreateFolderAsync("Strings", CreationCollisionOption.ReplaceExisting);
|
||||
|
||||
// Create string resources file from app resources if doesn't exists.
|
||||
// Create string resources file from app resources.
|
||||
string resourceFileName = "Resources.resw";
|
||||
await CreateStringResourceFileIfNotExists(stringsFolder, "de", resourceFileName);
|
||||
await CreateStringResourceFileIfNotExists(stringsFolder, "en", resourceFileName);
|
||||
await CreateStringResourceFileIfNotExists(stringsFolder, "es", resourceFileName);
|
||||
await CreateStringResourceFileIfNotExists(stringsFolder, "fr", resourceFileName);
|
||||
await CreateStringResourceFileIfNotExists(stringsFolder, "ja", resourceFileName);
|
||||
await CreateStringResourceFileIfNotExists(stringsFolder, "ko", resourceFileName);
|
||||
await CreateStringResourceFileIfNotExists(stringsFolder, "ru", resourceFileName);
|
||||
await CreateStringResourceFileIfNotExists(stringsFolder, "zh-Hans", resourceFileName);
|
||||
await CreateStringResourceFileIfNotExists(stringsFolder, "zh-Hant", resourceFileName);
|
||||
foreach (var item in LanguageHelper.SupportedDisplayLanguages)
|
||||
{
|
||||
await CreateStringResourceFile(stringsFolder, item.LanguageCode, resourceFileName);
|
||||
}
|
||||
|
||||
ILocalizer localizer = await new LocalizerBuilder()
|
||||
.AddStringResourcesFolderForLanguageDictionaries(stringsFolder.Path)
|
||||
@@ -175,18 +169,13 @@ namespace BetterLyrics.WinUI3
|
||||
.Build();
|
||||
}
|
||||
|
||||
private static async Task CreateStringResourceFileIfNotExists(StorageFolder stringsFolder, string language, string resourceFileName)
|
||||
private static async Task CreateStringResourceFile(StorageFolder stringsFolder, string language, string resourceFileName)
|
||||
{
|
||||
StorageFolder languageFolder = await stringsFolder.CreateFolderAsync(
|
||||
language,
|
||||
CreationCollisionOption.OpenIfExists);
|
||||
StorageFolder languageFolder = await stringsFolder.CreateFolderAsync(language, CreationCollisionOption.ReplaceExisting);
|
||||
|
||||
if (await languageFolder.TryGetItemAsync(resourceFileName) is null)
|
||||
{
|
||||
string resourceFilePath = Path.Combine(stringsFolder.Name, language, resourceFileName);
|
||||
StorageFile resourceFile = await LoadStringResourcesFileFromAppResource(resourceFilePath);
|
||||
_ = await resourceFile.CopyAsync(languageFolder);
|
||||
}
|
||||
string resourceFilePath = Path.Combine(stringsFolder.Name, language, resourceFileName);
|
||||
StorageFile resourceFile = await LoadStringResourcesFileFromAppResource(resourceFilePath);
|
||||
_ = await resourceFile.CopyAsync(languageFolder);
|
||||
}
|
||||
|
||||
private static async Task<StorageFile> LoadStringResourcesFileFromAppResource(string filePath)
|
||||
|
||||
@@ -138,7 +138,7 @@
|
||||
<!-- Copy all "Resources.resw" files in the "Strings" folder to the output folder. -->
|
||||
<ItemGroup>
|
||||
<Content Include="Strings\**\*.resw">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
||||
@@ -11,6 +11,7 @@ namespace BetterLyrics.WinUI3.Converter
|
||||
{
|
||||
if (value is string langCode)
|
||||
{
|
||||
langCode = LanguageHelper.ParseLanguageCode(langCode);
|
||||
return LanguageHelper.SupportedDisplayLanguages.FindIndex(x => x.LanguageCode == langCode);
|
||||
}
|
||||
return 0;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using BetterLyrics.WinUI3.Models;
|
||||
using NTextCat;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using Windows.Globalization;
|
||||
using WinUI3Localizer;
|
||||
@@ -11,7 +12,6 @@ namespace BetterLyrics.WinUI3.Helper
|
||||
{
|
||||
private static readonly RankedLanguageIdentifierFactory _factory = new();
|
||||
private static readonly RankedLanguageIdentifier _identifier;
|
||||
private static readonly ILocalizer _localizer = Localizer.Get();
|
||||
|
||||
public const string ChineseCode = "zh";
|
||||
public const string JapaneseCode = "ja";
|
||||
@@ -91,7 +91,6 @@ namespace BetterLyrics.WinUI3.Helper
|
||||
|
||||
public static List<ExtendedLanguage> SupportedDisplayLanguages { get; set; } =
|
||||
[
|
||||
new ExtendedLanguage("", _localizer.GetLocalizedString("SettingsPageSystemLanguage")),
|
||||
new ExtendedLanguage("de"),
|
||||
new ExtendedLanguage("en"),
|
||||
new ExtendedLanguage("es"),
|
||||
@@ -146,23 +145,35 @@ namespace BetterLyrics.WinUI3.Helper
|
||||
}
|
||||
}
|
||||
|
||||
public static string GetDefaultLanguageCode()
|
||||
public static string ParseLanguageCode(string? languageCode)
|
||||
{
|
||||
var systemLang = ApplicationLanguages.Languages.FirstOrDefault();
|
||||
if (systemLang == null)
|
||||
if (string.IsNullOrWhiteSpace(languageCode))
|
||||
{
|
||||
languageCode = ApplicationLanguages.Languages.FirstOrDefault();
|
||||
}
|
||||
|
||||
if (languageCode == null)
|
||||
{
|
||||
return "en";
|
||||
}
|
||||
|
||||
var shortSysLangCode = languageCode.Substring(0, 2);
|
||||
var found = SupportedDisplayLanguages.FirstOrDefault(x => shortSysLangCode == x.LanguageCode.Substring(0, 2));
|
||||
if (found == null)
|
||||
{
|
||||
return "en";
|
||||
}
|
||||
else
|
||||
{
|
||||
var found = SupportedDisplayLanguages.Where(x => x.LanguageCode != "").FirstOrDefault(x => systemLang.StartsWith(x.LanguageCode) == true);
|
||||
if (found == null)
|
||||
var shortLangCodeFound = found.LanguageCode.Substring(0, 2);
|
||||
if (shortLangCodeFound == "zh")
|
||||
{
|
||||
return "en";
|
||||
// https://learn.microsoft.com/zh-cn/windows/apps/publish/publish-your-app/msix/app-package-requirements#supported-languages
|
||||
return languageCode is "zh-Hans" or "zh-CN" or "zh-Hans-CN" or "zh-SG" or "zh-Hans-SG" ? "zh-Hans" : "zh-Hant";
|
||||
}
|
||||
else
|
||||
{
|
||||
return found.LanguageCode;
|
||||
return shortLangCodeFound;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,8 +7,8 @@ namespace BetterLyrics.WinUI3.Services.SettingsService
|
||||
public interface ISettingsService
|
||||
{
|
||||
AppSettings AppSettings { get; set; }
|
||||
// App behavior
|
||||
|
||||
void UpdateLanguage();
|
||||
bool ImportSettings(string importPath);
|
||||
void ExportSettings(string exportPath);
|
||||
}
|
||||
|
||||
@@ -118,15 +118,7 @@ namespace BetterLyrics.WinUI3.Services.SettingsService
|
||||
switch (e.PropertyName)
|
||||
{
|
||||
case nameof(GeneralSettings.LanguageCode):
|
||||
var langCode = AppSettings.GeneralSettings.LanguageCode;
|
||||
if (langCode == "")
|
||||
{
|
||||
_localizer.SetLanguage(LanguageHelper.GetDefaultLanguageCode());
|
||||
}
|
||||
else
|
||||
{
|
||||
_localizer.SetLanguage(langCode);
|
||||
}
|
||||
UpdateLanguage();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -134,6 +126,12 @@ namespace BetterLyrics.WinUI3.Services.SettingsService
|
||||
WriteAppSettings();
|
||||
}
|
||||
|
||||
public void UpdateLanguage()
|
||||
{
|
||||
var langCode = AppSettings.GeneralSettings.LanguageCode;
|
||||
_localizer.SetLanguage(LanguageHelper.ParseLanguageCode(langCode));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Export settings to specific folder
|
||||
/// </summary>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -35,7 +35,6 @@
|
||||
|
||||
<NavigationViewItem
|
||||
l:Uids.Uid="SettingsPageLyricsWindowMgr"
|
||||
Content="Lyrics window manager"
|
||||
Icon="{ui:FontIcon FontFamily={StaticResource IconFontFamily},
|
||||
Glyph=}"
|
||||
Tag="LyricsWindowMgr" />
|
||||
|
||||
Reference in New Issue
Block a user