see requirements for 706

This commit is contained in:
DESKTOP-T0O5CDB\DESK-555BD 2024-11-11 09:03:22 -07:00
parent 5411d4152c
commit 9cd8030808
4 changed files with 28 additions and 7 deletions

View File

@ -123,7 +123,9 @@ namespace CarCareTracker.Helper
}
public OperationResponse SaveTranslation(string userLanguage, Dictionary<string, string> translations)
{
if (userLanguage == "en_US")
bool create = bool.Parse(_config["LUBELOGGER_TRANSLATOR"] ?? "false");
bool isDefaultLanguage = userLanguage == "en_US";
if (isDefaultLanguage && !create)
{
return new OperationResponse { Success = false, Message = "The translation file name en_US is reserved." };
}
@ -135,7 +137,7 @@ namespace CarCareTracker.Helper
{
return new OperationResponse { Success = false, Message = "Translation has no data." };
}
var translationFilePath = _fileHelper.GetFullFilePath($"/translations/{userLanguage}.json", false);
var translationFilePath = isDefaultLanguage ? _fileHelper.GetFullFilePath($"/defaults/en_US.json") : _fileHelper.GetFullFilePath($"/translations/{userLanguage}.json", false);
try
{
if (File.Exists(translationFilePath))
@ -173,7 +175,13 @@ namespace CarCareTracker.Helper
Directory.CreateDirectory(uploadDirectory);
}
var saveFilePath = _fileHelper.GetFullFilePath(tempFileName, false);
File.WriteAllText(saveFilePath, JsonSerializer.Serialize(translations));
//standardize translation format for export only.
Dictionary<string, string> sortedTranslations = new Dictionary<string, string>();
foreach (var translation in translations.OrderBy(x => x.Key))
{
sortedTranslations.Add(translation.Key, translation.Value);
};
File.WriteAllText(saveFilePath, JsonSerializer.Serialize(sortedTranslations, new JsonSerializerOptions { WriteIndented = true }));
return tempFileName;
}
catch(Exception ex)

View File

@ -1,10 +1,12 @@
@using CarCareTracker.Helper
@inject IConfigHelper config
@inject ITranslationHelper translator
@inject IConfiguration serverConfig;
@model Dictionary<string, string>
@{
var userConfig = config.GetUserConfig(User);
var userLanguage = userConfig.UserLanguage;
bool showDelete = bool.Parse(serverConfig["LUBELOGGER_TRANSLATOR"] ?? "false");
}
<div class="modal-header">
<h5 class="modal-title" id="translationEditorModalLabel">@translator.Translate(userLanguage, "Translation Editor")</h5>
@ -15,8 +17,15 @@
<div class="form-group" style="max-height:50vh; overflow-x:hidden; overflow-y:scroll;">
@foreach(var translation in Model)
{
<div class="row translation-keyvalue mb-2">
<div class="col-md-6 col-12 translation-key">@translation.Key.Replace("_", " ")</div>
<div class="row translation-keyvalue mb-2 align-items-center">
@if (showDelete)
{
<div class="col-md-1 col-1 translation-delete"><button onclick="deleteTranslationKey(this)" class="btn text-danger btn-sm"><i class="bi bi-x-lg"></i></button></div>
<div class="col-md-5 col-11 translation-key">@translation.Key.Replace("_", " ")</div>
} else
{
<div class="col-md-6 col-12 translation-key">@translation.Key.Replace("_", " ")</div>
}
<div class="col-md-6 col-12 translation-value">
<textarea style="height:100%;width:98%;" class="form-control" placeholder="@translation.Value">@translation.Value</textarea>
</div>

File diff suppressed because one or more lines are too long

View File

@ -189,6 +189,7 @@ function saveTranslation() {
errorToast(genericErrorMessage());
return;
}
var userCanDelete = $(".translation-delete").length > 0;
Swal.fire({
title: 'Save Translation',
html: `
@ -200,7 +201,7 @@ function saveTranslation() {
const translationFileName = $("#translationFileName").val();
if (!translationFileName || translationFileName.trim() == '') {
Swal.showValidationMessage(`Please enter a valid file name`);
} else if (translationFileName.trim() == 'en_US') {
} else if (translationFileName.trim() == 'en_US' && !userCanDelete) {
Swal.showValidationMessage(`en_US is reserved, please enter a different name`);
}
return { translationFileName }
@ -270,6 +271,9 @@ function downloadAllTranslations() {
}
})
}
function deleteTranslationKey(e) {
$(e).parent().parent().remove();
}
//tabs reorder
function showTabReorderModal() {
//reorder the list items based on the CSS attribute