UX: fix #1829
This commit is contained in:
parent
940f187041
commit
040e0fd8bf
2 changed files with 49 additions and 20 deletions
|
@ -852,7 +852,7 @@ class CheckTranslation extends DesugaringStep<Translatable> {
|
|||
for (const key of keys) {
|
||||
const lng = json[key]
|
||||
if (lng === "") {
|
||||
context.enter(lng).err("Got an empty string in translation for language " + lng)
|
||||
context.enter(lng).err("Got an empty string in translation for language " + key)
|
||||
}
|
||||
|
||||
// TODO validate that all subparts are here
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
import LanguageUtils from "../../../Utils/LanguageUtils"
|
||||
import { createEventDispatcher, onDestroy } from "svelte"
|
||||
import ValidatedInput from "../ValidatedInput.svelte"
|
||||
import { del } from "idb-keyval"
|
||||
|
||||
export let value: UIEventSource<Record<string, string>> = new UIEventSource<
|
||||
Record<string, string>
|
||||
|
@ -18,14 +19,25 @@
|
|||
const allLanguages: string[] = LanguageUtils.usedLanguagesSorted
|
||||
let currentLang = new UIEventSource("en")
|
||||
const currentVal = new UIEventSource<string>("")
|
||||
/**
|
||||
* Mostly the same as currentVal, but might be the empty string as well
|
||||
*/
|
||||
const currentValRaw = new UIEventSource<string>("")
|
||||
|
||||
let dispatch = createEventDispatcher<{ submit }>()
|
||||
|
||||
function update() {
|
||||
const v = currentVal.data
|
||||
let v = currentValRaw.data
|
||||
const l = currentLang.data
|
||||
console.log("Updating translation input for value", v, " and language", l)
|
||||
if (<any>translations.data === "" || translations.data === undefined) {
|
||||
translations.data = {}
|
||||
}
|
||||
if (v === "") {
|
||||
delete translations.data[l]
|
||||
translations.ping()
|
||||
return
|
||||
}
|
||||
if (translations.data[l] === v) {
|
||||
return
|
||||
}
|
||||
|
@ -39,35 +51,52 @@
|
|||
translations.data = {}
|
||||
}
|
||||
translations.data[currentLang] = translations.data[currentLang] ?? ""
|
||||
currentVal.setData(translations.data[currentLang])
|
||||
if (translations.data[currentLang] === "") {
|
||||
delete translations.data[currentLang]
|
||||
}
|
||||
currentVal.setData(translations.data[currentLang] ?? "")
|
||||
currentValRaw.setData(translations.data[currentLang])
|
||||
})
|
||||
)
|
||||
|
||||
onDestroy(
|
||||
currentVal.addCallbackAndRunD(() => {
|
||||
currentValRaw.addCallbackAndRunD(() => {
|
||||
update()
|
||||
})
|
||||
)
|
||||
</script>
|
||||
|
||||
<div class="interactive m-1 mt-2 flex space-x-1 font-bold">
|
||||
</script>
|
||||
<div class="flex flex-col gap-y-1">
|
||||
<div class="interactive m-1 mt-2 flex space-x-1 font-bold">
|
||||
<span>
|
||||
{prefix}
|
||||
</span>
|
||||
<select bind:value={$currentLang}>
|
||||
{#each allLanguages as language}
|
||||
<option value={language}>
|
||||
{language}
|
||||
</option>
|
||||
{/each}
|
||||
</select>
|
||||
<ValidatedInput
|
||||
type="string"
|
||||
cls="w-full"
|
||||
value={currentVal}
|
||||
on:submit={() => dispatch("submit")}
|
||||
/>
|
||||
<span>
|
||||
<select bind:value={$currentLang}>
|
||||
{#each allLanguages as language}
|
||||
<option value={language}>
|
||||
{language}
|
||||
{#if $translations[language] !== undefined}
|
||||
*
|
||||
{/if}
|
||||
</option>
|
||||
{/each}
|
||||
</select>
|
||||
<ValidatedInput
|
||||
type="string"
|
||||
cls="w-full"
|
||||
value={currentVal}
|
||||
unvalidatedText={currentValRaw}
|
||||
on:submit={() => dispatch("submit")}
|
||||
/>
|
||||
<span>
|
||||
{postfix}
|
||||
</span>
|
||||
|
||||
</div>
|
||||
You have currently set translations for
|
||||
<ul>
|
||||
{#each Object.keys($translations) as l}
|
||||
<li><button class="small" on:click={() => currentLang.setData(l)}><b>{l}:</b> {$translations[l]}</button></li>
|
||||
{/each}
|
||||
</ul>
|
||||
</div>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue