diff --git a/backend/i18n/translator/Squidex.Translator/Commands.cs b/backend/i18n/translator/Squidex.Translator/Commands.cs index b744315d2..f55f064e9 100644 --- a/backend/i18n/translator/Squidex.Translator/Commands.cs +++ b/backend/i18n/translator/Squidex.Translator/Commands.cs @@ -77,6 +77,18 @@ namespace Squidex.Translator new GenerateBackendResources(folder, service).Run(); } + [Command(Name = "gen-keys", Description = "Generate the keys for translations.")] + public void GenerateBackendKeys(TranslateArguments arguments) + { + var (folderBackend, serviceBackend) = Setup(arguments, "backend"); + + new GenerateKeys(folderBackend, serviceBackend, "backend").Run(); + + var (folderFrontend, serviceFrontend) = Setup(arguments, "frontend"); + + new GenerateKeys(folderFrontend, serviceFrontend, "frontend").Run(); + } + [Command(Name = "migrate-backend", Description = "Migrate the backend files.")] public void MigrateBackend(TranslateArguments arguments) { diff --git a/backend/i18n/translator/Squidex.Translator/Processes/GenerateKeys.cs b/backend/i18n/translator/Squidex.Translator/Processes/GenerateKeys.cs new file mode 100644 index 000000000..5dc48b9d0 --- /dev/null +++ b/backend/i18n/translator/Squidex.Translator/Processes/GenerateKeys.cs @@ -0,0 +1,39 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.IO; +using System.Resources.NetStandard; +using Squidex.Translator.State; + +namespace Squidex.Translator.Processes +{ + public sealed class GenerateKeys + { + private readonly TranslationService service; + private readonly DirectoryInfo folder; + + public GenerateKeys(DirectoryInfo folder, TranslationService service, string type) + { + if (type == "frontend") + { + this.folder = Frontend.GetFolder(folder); + } + else if (type == "backend") + { + this.folder = new DirectoryInfo(Path.Combine(folder.FullName, "backend", "src", "Squidex.Shared")); + } + + this.service = service; + } + + public void Run() + { + service.SaveKeys(); + } + } +} diff --git a/backend/i18n/translator/Squidex.Translator/State/TranslationKeys.cs b/backend/i18n/translator/Squidex.Translator/State/TranslationKeys.cs new file mode 100644 index 000000000..477e28f54 --- /dev/null +++ b/backend/i18n/translator/Squidex.Translator/State/TranslationKeys.cs @@ -0,0 +1,15 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System.Collections.Generic; + +namespace Squidex.Translator.State +{ + public sealed class TranslationKeys : SortedDictionary + { + } +} diff --git a/backend/i18n/translator/Squidex.Translator/State/TranslationService.cs b/backend/i18n/translator/Squidex.Translator/State/TranslationService.cs index f0b5ee027..54379a702 100644 --- a/backend/i18n/translator/Squidex.Translator/State/TranslationService.cs +++ b/backend/i18n/translator/Squidex.Translator/State/TranslationService.cs @@ -76,7 +76,7 @@ namespace Squidex.Translator.State private void Save(string name, T value) where T : new() { - var path = directory.FullName + name; + var path = Path.Combine(directory.FullName, this.fileName + name); WriteTo(value, path); } @@ -126,6 +126,18 @@ namespace Squidex.Translator.State Save("__ignore.json", translationToIgnore); } + public void SaveKeys() + { + var translationKeys = new TranslationKeys(); + + foreach (var text in Texts) + { + translationKeys.Add(text.Key, string.Empty); + } + + Save("__keys.json", translationKeys); + } + public void Translate(string fileName, string text, string originText, Action handler, bool silent = false) { if (onlySingleWords && text.Contains(' '))