Web: Added not found keys in 'de' language translation files (fix NotTranslatedKeysTest issue)

This commit is contained in:
Alexey Safronov 2021-05-31 20:33:12 +03:00
parent 061b4e46e7
commit 7beccd192b
7 changed files with 73 additions and 32 deletions

View File

@ -268,7 +268,7 @@ namespace Frontend.Translations.Tests
Assert.AreEqual(0, duplicates.Count, string.Join(", ", duplicates.Select(d => JObject.FromObject(d).ToString())));
}
private static void SaveNotFoundLanguage(string existJsonPath, string notExistJsonPath)
public static void SaveNotFoundLanguage(string existJsonPath, string notExistJsonPath)
{
if (!File.Exists(existJsonPath) || File.Exists(notExistJsonPath))
return;
@ -343,53 +343,70 @@ namespace Frontend.Translations.Tests
Assert.AreEqual(0, incompleteList.Count, message);
}
public static void SaveNotFoundKeys(string pathToJson, List<string> newKeys)
{
if (!File.Exists(pathToJson))
return;
var jsonTranslation = JObject.Parse(File.ReadAllText(pathToJson));
var properties = jsonTranslation.Properties().Select(t => t).ToList();
properties.AddRange(newKeys.Select(k => new JProperty(k, ""))); //.ForEach(p => p.Value = "");
properties = properties.OrderBy(t => t.Name).ToList();
var result = new JObject(properties);
var sortedJsonString = JsonConvert.SerializeObject(result, Formatting.Indented);
File.WriteAllText(pathToJson, sortedJsonString);
}
[Test]
public void NotTranslatedKeysTest()
{
var groupedByLng = TranslationFiles
.GroupBy(t => t.Language)
.Select(grp => new
{
Lng = grp.Key,
Keys = grp
.SelectMany(k => k.Translations)
.OrderByDescending(itm => itm.Key)
.ToList()
})
.ToList();
var message = $"Next languages are not equal 'en' by translated keys count:\r\n\r\n";
var enGroup = groupedByLng.Find(f => f.Lng == "en");
var exists = false;
var expectedCount = enGroup.Keys.Count;
var i = 0;
var otherLngs = groupedByLng.Where(g => g.Lng != "en");
var incompleteList = otherLngs
.Where(lng => lng.Keys.Count != expectedCount)
.Select(lng => new { Issue = $"Language '{lng.Lng}' (Count={lng.Keys.Count}). Not found keys:\r\n", lng.Lng, lng.Keys })
.ToList();
var message = $"Next languages are not equal 'en' (Count= {expectedCount}) by translated keys count:\r\n\r\n";
if (incompleteList.Count > 0)
foreach (var module in ModuleFolders)
{
var enKeys = enGroup.Keys.Select(f => f.Key);
if (module.AvailableLanguages == null)
continue;
for (int i = 0; i < incompleteList.Count; i++)
var enLanguages = module.AvailableLanguages.Where(l => l.Language == "en").ToList();
var otherLanguages = module.AvailableLanguages.Where(l => l.Language != "en").ToList();
foreach (var lng in otherLanguages)
{
var lng = incompleteList[i];
var lngKeys = lng.Translations.Select(f => f.Key).ToList();
message += $"{i}. {lng.Issue}\r\n";
var enKeys = enLanguages.Where(l => l.Path == lng.Path.Replace($"\\{lng.Language}\\", "\\en\\"))
.SelectMany(l => l.Translations.Select(f => f.Key))
.ToList();
var lngKeys = lng.Keys.Select(f => f.Key).ToList();
var notFoundKeys = enKeys.Except(lngKeys).ToList();
var notFoundKeys = enKeys.Except(lngKeys);
if (!notFoundKeys.Any())
continue;
exists = true;
message += $"{++i}. Language ('{lng.Language}'={notFoundKeys.Count}/'en'={enKeys.Count}). Path '{lng.Path}' " +
$"Not found keys:\r\n\r\n";
message += string.Join("\r\n", notFoundKeys) + "\r\n\r\n";
// Save empty not found keys
//SaveNotFoundKeys(lng.Path, notFoundKeys);
}
}
Assert.AreEqual(0, incompleteList.Count, message);
Assert.AreEqual(false, exists, message);
}
[Test]

View File

@ -1,4 +1,5 @@
{
"AddAccount": "",
"ArchivingData": "Archivieren der Daten",
"ConnectingAccount": "Konto wird verbunden",
"Copy": "Kopieren",
@ -18,5 +19,6 @@
"Presentations": "Präsentationen",
"Restore": "Wiederherstellen",
"Spreadsheets": "Tabellenkalkulationen",
"ThirdPartyInfo": "",
"UploadingLabel": "Dateien hochgeladen: {{file}} von {{totalFiles}}"
}

View File

@ -3,6 +3,7 @@
"ChangeToGuest": "Zu {{guestCaption}} ändern",
"ChangeToUser": "Zu {{userCaption}} ändern",
"EmptyGroupDescription": "Sie können neue Teammitglieder manuell oder über den Link einladen.",
"EmptyGroupTitle": "",
"LblInviteAgain": "Erneut einladen",
"LblInvited": "Eingeladen",
"LblOther": "Sonstiges",

View File

@ -2,12 +2,17 @@
"Birthdate": "Geburtsdatum",
"ChangeEmailSuccess": "E-Mail wurde erfolgreich geändert",
"ChangesApplied": "Die Änderungen wurden übernommen",
"Connect": "",
"ContactInformation": "Kontaktdaten",
"Disconnect": "",
"EditPhoto": "Bild bearbeiten",
"EditSubscriptionsBtn": "Abonnements bearbeiten",
"EditUser": "Profil bearbeiten",
"InviteAgainLbl": "Erneut einladen",
"LoginSettings": "",
"MessageEmailActivationInstuctionsSentOnEmail": "Die Hinweise für die Aktivierung wurden an <strong>{{ email }}</strong> versandt.",
"PhoneLbl": "Telefon",
"ProviderSuccessfullyConnected": "",
"ProviderSuccessfullyDisconnected": "",
"Subscriptions": "Abonnements"
}

View File

@ -8,6 +8,7 @@
"ChangeButton": "Ändern",
"ChangesSavedSuccessfully": "Änderungen wurden gespeichert",
"ContactInformation": "Kontaktdaten",
"CopiedResourceText": "",
"CustomCreation": "{{user}} (Erstellung)",
"EditPhoto": "Bild bearbeiten",
"EditUserDialogTitle": "Profil bearbeiten",

View File

@ -5,5 +5,6 @@
"RecoverContactEmailPlaceholder": "E-Mail-Adresse",
"RecoverDescribeYourProblemPlaceholder": "Bitte Problem beschreiben",
"RecoverTextBody": "Wenn Sie sich mit Ihren Anmeldeinformationen nicht einloggen können oder ein neues Profil erstellen möchten, wenden Sie sich an den Administrator des Portals.",
"RecoverTitle": "Zugriffswiederherstellung"
"RecoverTitle": "Zugriffswiederherstellung",
"TurnOnDesktopVersion": ""
}

View File

@ -6,15 +6,22 @@
"AccessRightsOwnerOpportunities": "Dieselben Operationen wie die Moduladministratoren durchführen|Moduladministratoren bestimmen|Modulzugriffsrechte bestimmen|Portal einrichten|Benutzerprofile verwalten|Portalbesitzer ändern|Backup von Portaldaten erstellen|Portal deaktivieren oder löschen",
"AccessRightsProductUsersCan": "Im Modul {{category}} Portalbenutzer können",
"AccessRightsUsersFromList": "{{users}} aus der Liste",
"AddName": "",
"Backup": "Backup",
"BrowserNoCanvasSupport": "Ihr Browser unterstützt die HTML5 Canvas-Tag nicht.",
"ChangeLogoButton": "Logo ändern",
"ChooseOwner": "Besitzer wählen",
"CompanyNameForCanvasLogo": "Name des Unternehmens",
"ConfirmEmailSended": "",
"Customization": "Anpassung",
"CustomTitles": "Benutzerdefinierte Titel",
"CustomTitlesSettingsDescription": "Wird auf Ihrer Begrüßungsseite angezeigt und für E-Mail-Benachrichtigungen verwendet (im Feld \"Von\"). Mit dem benutzerdefinierten Domainnamen können Sie eine andere URL für Ihr Portal festlegen. Der Name des benutzerdefinierten Portals wird neben der Adresse onlyoffice.com/onlyoffice.eu angezeigt.",
"Employees": "Benutzer",
"Group": "",
"GroupLead": "",
"Groups": "",
"Guests": "",
"Job/Title": "",
"LanguageAndTimeZoneSettingsDescription": "Die Sprache für alle Portalbenutzer ändern und Zeitzone konfigurieren, so dass alle Veranstaltungen mit richtigen Daten und Uhrzeiten angezeigt werden.",
"LogoDark": "Logo für die Login- und Informationsseite",
"LogoDocsEditor": "Logo für Kopfzeile der Editoren",
@ -29,8 +36,11 @@
"NotFoundDescription": "Filterungsoptionen ändern und Personen zu diesem Bereich hinzufügen.",
"NotFoundTitle": "Keine Suchergebnisse",
"PeopleAdmin": "Administrator des Moduls Personen",
"PortalAdmins": "",
"PortalAdminsDescription": "",
"PortalOwner": "Portalbesitzer",
"ProductUserOpportunities": "Profile und Gruppen anschauen",
"RegistrationDate": "",
"RestoreDefaultButton": "Standardmäßige Einstellungen",
"SetDefaultTitle": "Standardtitel setzen",
"SetPeopleAdmin": "Administrator des Moduls Personen auswählen",
@ -38,6 +48,9 @@
"StudioTimeLanguageSettings": "Sprach- und Zeitzoneneinstellungen",
"SuccessfullySaveGreetingSettingsMessage": "Die Begrüßungseinstellungen wurden gespeichert",
"SuccessfullySaveSettingsMessage": "Die Einstellungen wurden erfolgreich aktualisiert",
"TeamTemplate": "",
"TeamTemplateSettingsDescription": "",
"Template": "",
"ThirdPartyAuthorization": "Dienste von Drittanbietern",
"ThirdPartyBodyDescription": "Weitere Informationen finden Sie im <2>Hilfe-Center</2>.",
"ThirdPartyBottomDescription": "Brauchen Sie Hilfe? Bitte an unser <2>Support-Team</2> wenden.",
@ -47,6 +60,7 @@
"ThirdPartyTitleDescription": "Mit Berechtigungsschlüsseln können Sie Ihr Portal mit den Drittleistungen verbinden. Loggen Sie sich einfacher mit Facebook, Twitter oder LinkedIn. Fügen Sie Dropbox, OneDrive usw. hinzu, um mit dort gespeicherten Dateien aus dem Modul Dokumente zu arbeiten.",
"TimeZone": "Zeitzone",
"UseAsLogoButton": "Als Logo verwenden",
"Users": "",
"WelcomePageTitle": "Titel der Begrüßungsseite",
"YouHaveUnsavedChanges": "Sie haben nicht gespeicherte Änderungen."
}