From a340a77d74e34ee486cfa76bd8e0897dc8e2c885 Mon Sep 17 00:00:00 2001 From: jvyden Date: Wed, 13 Apr 2022 18:58:07 -0400 Subject: [PATCH] Add ability to fetch translations for a given language --- .../ProjectLighthouse.Localisation.csproj | 17 --------- .../BaseLayout.da-DK.resx | 0 .../BaseLayout.en-UD.resx | 0 .../BaseLayout.es-MX.resx | 0 .../BaseLayout.ja-JP.resx | 0 .../BaseLayout.pl-PL.resx | 0 .../BaseLayout.resx | 0 .../BaseLayout.ru-RU.resx | 0 .../BaseLayout.sv-SE.resx | 0 .../BaseLayout.zh-CN.resx | 0 .../LocalizationManager.cs | 36 +++++++++++++++++++ ProjectLighthouse.Localization/Program.cs | 14 ++++++++ .../ProjectLighthouse.Localization.csproj | 11 ++++++ .../TranslationAreas.cs | 6 ++++ ProjectLighthouse.sln | 2 +- ...isationHelper.cs => LocalizationHelper.cs} | 2 +- ProjectLighthouse/ProjectLighthouse.csproj | 6 ++-- crowdin.yml | 27 +++++++------- 18 files changed, 86 insertions(+), 35 deletions(-) delete mode 100644 ProjectLighthouse.Localisation/ProjectLighthouse.Localisation.csproj rename {ProjectLighthouse.Localisation => ProjectLighthouse.Localization}/BaseLayout.da-DK.resx (100%) rename {ProjectLighthouse.Localisation => ProjectLighthouse.Localization}/BaseLayout.en-UD.resx (100%) rename {ProjectLighthouse.Localisation => ProjectLighthouse.Localization}/BaseLayout.es-MX.resx (100%) rename {ProjectLighthouse.Localisation => ProjectLighthouse.Localization}/BaseLayout.ja-JP.resx (100%) rename {ProjectLighthouse.Localisation => ProjectLighthouse.Localization}/BaseLayout.pl-PL.resx (100%) rename {ProjectLighthouse.Localisation => ProjectLighthouse.Localization}/BaseLayout.resx (100%) rename {ProjectLighthouse.Localisation => ProjectLighthouse.Localization}/BaseLayout.ru-RU.resx (100%) rename {ProjectLighthouse.Localisation => ProjectLighthouse.Localization}/BaseLayout.sv-SE.resx (100%) rename {ProjectLighthouse.Localisation => ProjectLighthouse.Localization}/BaseLayout.zh-CN.resx (100%) create mode 100644 ProjectLighthouse.Localization/LocalizationManager.cs create mode 100644 ProjectLighthouse.Localization/Program.cs create mode 100644 ProjectLighthouse.Localization/ProjectLighthouse.Localization.csproj create mode 100644 ProjectLighthouse.Localization/TranslationAreas.cs rename ProjectLighthouse/Helpers/{LocalisationHelper.cs => LocalizationHelper.cs} (55%) diff --git a/ProjectLighthouse.Localisation/ProjectLighthouse.Localisation.csproj b/ProjectLighthouse.Localisation/ProjectLighthouse.Localisation.csproj deleted file mode 100644 index 7905a768..00000000 --- a/ProjectLighthouse.Localisation/ProjectLighthouse.Localisation.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - net6.0 - enable - enable - LBPUnion.ProjectLighthouse.Localisation - - - - - ResXFileCodeGenerator - BaseLayout.Designer.cs - - - - diff --git a/ProjectLighthouse.Localisation/BaseLayout.da-DK.resx b/ProjectLighthouse.Localization/BaseLayout.da-DK.resx similarity index 100% rename from ProjectLighthouse.Localisation/BaseLayout.da-DK.resx rename to ProjectLighthouse.Localization/BaseLayout.da-DK.resx diff --git a/ProjectLighthouse.Localisation/BaseLayout.en-UD.resx b/ProjectLighthouse.Localization/BaseLayout.en-UD.resx similarity index 100% rename from ProjectLighthouse.Localisation/BaseLayout.en-UD.resx rename to ProjectLighthouse.Localization/BaseLayout.en-UD.resx diff --git a/ProjectLighthouse.Localisation/BaseLayout.es-MX.resx b/ProjectLighthouse.Localization/BaseLayout.es-MX.resx similarity index 100% rename from ProjectLighthouse.Localisation/BaseLayout.es-MX.resx rename to ProjectLighthouse.Localization/BaseLayout.es-MX.resx diff --git a/ProjectLighthouse.Localisation/BaseLayout.ja-JP.resx b/ProjectLighthouse.Localization/BaseLayout.ja-JP.resx similarity index 100% rename from ProjectLighthouse.Localisation/BaseLayout.ja-JP.resx rename to ProjectLighthouse.Localization/BaseLayout.ja-JP.resx diff --git a/ProjectLighthouse.Localisation/BaseLayout.pl-PL.resx b/ProjectLighthouse.Localization/BaseLayout.pl-PL.resx similarity index 100% rename from ProjectLighthouse.Localisation/BaseLayout.pl-PL.resx rename to ProjectLighthouse.Localization/BaseLayout.pl-PL.resx diff --git a/ProjectLighthouse.Localisation/BaseLayout.resx b/ProjectLighthouse.Localization/BaseLayout.resx similarity index 100% rename from ProjectLighthouse.Localisation/BaseLayout.resx rename to ProjectLighthouse.Localization/BaseLayout.resx diff --git a/ProjectLighthouse.Localisation/BaseLayout.ru-RU.resx b/ProjectLighthouse.Localization/BaseLayout.ru-RU.resx similarity index 100% rename from ProjectLighthouse.Localisation/BaseLayout.ru-RU.resx rename to ProjectLighthouse.Localization/BaseLayout.ru-RU.resx diff --git a/ProjectLighthouse.Localisation/BaseLayout.sv-SE.resx b/ProjectLighthouse.Localization/BaseLayout.sv-SE.resx similarity index 100% rename from ProjectLighthouse.Localisation/BaseLayout.sv-SE.resx rename to ProjectLighthouse.Localization/BaseLayout.sv-SE.resx diff --git a/ProjectLighthouse.Localisation/BaseLayout.zh-CN.resx b/ProjectLighthouse.Localization/BaseLayout.zh-CN.resx similarity index 100% rename from ProjectLighthouse.Localisation/BaseLayout.zh-CN.resx rename to ProjectLighthouse.Localization/BaseLayout.zh-CN.resx diff --git a/ProjectLighthouse.Localization/LocalizationManager.cs b/ProjectLighthouse.Localization/LocalizationManager.cs new file mode 100644 index 00000000..944947bb --- /dev/null +++ b/ProjectLighthouse.Localization/LocalizationManager.cs @@ -0,0 +1,36 @@ +using System.Diagnostics; +using System.Reflection; +using System.Resources; + +namespace LBPUnion.ProjectLighthouse.Localization; + +public static class LocalizationManager +{ + private static readonly string namespaceStr = typeof(LocalizationManager).Namespace ?? ""; + + public static string GetLocalizedString(TranslationAreas translationArea, string language, string key) + { + #if DEBUG + Console.WriteLine($"Attempting to load '{key}' for '{language}' "); + #endif + + string resourceBasename = $"{namespaceStr}.{translationArea.ToString()}.{language}"; + ResourceManager resourceManager = new(resourceBasename, Assembly.GetExecutingAssembly()); + + string? localizedString = resourceManager.GetString(key); + if (localizedString == null) + { + #if DEBUG + if (Debugger.IsAttached) Debugger.Break(); + #endif + return $"{translationArea.ToString()}.{language}.{key}"; + } + + return localizedString; + } + + public static IEnumerable GetAvailableLanguages(TranslationAreas translationArea) + { + return Assembly.GetExecutingAssembly().GetManifestResourceNames().Where(r => r.StartsWith($"{namespaceStr}.{translationArea.ToString()}")); + } +} \ No newline at end of file diff --git a/ProjectLighthouse.Localization/Program.cs b/ProjectLighthouse.Localization/Program.cs new file mode 100644 index 00000000..1e073030 --- /dev/null +++ b/ProjectLighthouse.Localization/Program.cs @@ -0,0 +1,14 @@ +namespace LBPUnion.ProjectLighthouse.Localization; + +public static class Program +{ + public static void Main() + { + Console.WriteLine(LocalizationManager.GetLocalizedString(TranslationAreas.BaseLayout, "en-UD", "header_home")); + Console.WriteLine("Available languages:"); + foreach (string language in LocalizationManager.GetAvailableLanguages(TranslationAreas.BaseLayout)) + { + Console.WriteLine(language); + } + } +} \ No newline at end of file diff --git a/ProjectLighthouse.Localization/ProjectLighthouse.Localization.csproj b/ProjectLighthouse.Localization/ProjectLighthouse.Localization.csproj new file mode 100644 index 00000000..824bcb4c --- /dev/null +++ b/ProjectLighthouse.Localization/ProjectLighthouse.Localization.csproj @@ -0,0 +1,11 @@ + + + + net6.0 + enable + enable + LBPUnion.ProjectLighthouse.Localization + Exe + + + diff --git a/ProjectLighthouse.Localization/TranslationAreas.cs b/ProjectLighthouse.Localization/TranslationAreas.cs new file mode 100644 index 00000000..5b380df0 --- /dev/null +++ b/ProjectLighthouse.Localization/TranslationAreas.cs @@ -0,0 +1,6 @@ +namespace LBPUnion.ProjectLighthouse.Localization; + +public enum TranslationAreas +{ + BaseLayout, +} \ No newline at end of file diff --git a/ProjectLighthouse.sln b/ProjectLighthouse.sln index 9f7d42c0..fde4d678 100644 --- a/ProjectLighthouse.sln +++ b/ProjectLighthouse.sln @@ -10,7 +10,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectLighthouse.Tests.Gam EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectLighthouse.Tests.WebsiteTests", "ProjectLighthouse.Tests.WebsiteTests\ProjectLighthouse.Tests.WebsiteTests.csproj", "{CF65EB5B-5364-4D2A-8639-F147A67F08E7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectLighthouse.Localisation", "ProjectLighthouse.Localisation\ProjectLighthouse.Localisation.csproj", "{CDB81465-F758-4842-B843-F77ABEE7C3BF}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectLighthouse.Localization", "ProjectLighthouse.Localization\ProjectLighthouse.Localization.csproj", "{CDB81465-F758-4842-B843-F77ABEE7C3BF}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/ProjectLighthouse/Helpers/LocalisationHelper.cs b/ProjectLighthouse/Helpers/LocalizationHelper.cs similarity index 55% rename from ProjectLighthouse/Helpers/LocalisationHelper.cs rename to ProjectLighthouse/Helpers/LocalizationHelper.cs index f7d6d580..e22f91d8 100644 --- a/ProjectLighthouse/Helpers/LocalisationHelper.cs +++ b/ProjectLighthouse/Helpers/LocalizationHelper.cs @@ -1,4 +1,4 @@ namespace LBPUnion.ProjectLighthouse.Helpers; -public static class LocalisationHelper +public static class LocalizationHelper {} \ No newline at end of file diff --git a/ProjectLighthouse/ProjectLighthouse.csproj b/ProjectLighthouse/ProjectLighthouse.csproj index d0c22455..72987f69 100644 --- a/ProjectLighthouse/ProjectLighthouse.csproj +++ b/ProjectLighthouse/ProjectLighthouse.csproj @@ -43,11 +43,11 @@ Always - + Always - + Always @@ -60,7 +60,7 @@ - + diff --git a/crowdin.yml b/crowdin.yml index 6f4e10a3..9d34341c 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -10,29 +10,30 @@ files: [ # Source files filter # e.g. "/resources/en/*.json" # - "source": "/ProjectLighthouse.Localisation/*.resx", + "source": "/ProjectLighthouse.Localization/*.resx", # # Where translations will be placed # e.g. "/resources/%two_letters_code%/%original_file_name%" # - "translation": "/ProjectLighthouse.Localisation/%file_name%.%locale%.%file_extension%", + "translation": "/ProjectLighthouse.Localization/%file_name%.%locale%.%file_extension%", # # Files or directories for ignore # e.g. ["/**/?.txt", "/**/[0-9].txt", "/**/*\?*.txt"] # - #"ignore" : [], - - # - # The dest allows you to specify a file name in Crowdin - # e.g. "/messages.json" - # - #"dest" : "", - - # - # File type - # e.g. "json" + ignore: + - "/ProjectLighthouse.Localization/%file_name%.*.%file_extension%" + + # + # The dest allows you to specify a file name in Crowdin + # e.g. "/messages.json" + # + #"dest" : "", + + # + # File type + # e.g. "json" # #"type" : "",