wip i18n editor
can be accessed with: app.appRoute("lzedit")
This commit is contained in:
parent
34a1c5353f
commit
b5074cfe6f
4 changed files with 105 additions and 0 deletions
|
@ -120,6 +120,11 @@ export class BrowserWindow {
|
||||||
"components/settings-plugins-github",
|
"components/settings-plugins-github",
|
||||||
],
|
],
|
||||||
appRoutes: [
|
appRoutes: [
|
||||||
|
{
|
||||||
|
page: "lzedit",
|
||||||
|
component: `<i18n-editor></i18n-editor>`,
|
||||||
|
condition: "$root.page == 'lzedit'",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
page: "library-recentlyadded",
|
page: "library-recentlyadded",
|
||||||
component: `<cider-recentlyadded></cider-recentlyadded>`,
|
component: `<cider-recentlyadded></cider-recentlyadded>`,
|
||||||
|
|
|
@ -1480,6 +1480,22 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.i18n-page {
|
||||||
|
textarea {
|
||||||
|
background: black;
|
||||||
|
color: #eee;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 1em;
|
||||||
|
font-family: system-ui, 'Pretendard Variable';
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selectCol {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// AudioLabs page
|
// AudioLabs page
|
||||||
.audiolabs-page {
|
.audiolabs-page {
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
|
|
|
@ -10,6 +10,7 @@ import { MusicKitTools } from "./musickittools.js";
|
||||||
import { spawnMica } from "./mica.js";
|
import { spawnMica } from "./mica.js";
|
||||||
import { svgIcon } from "./components/svg-icon.js";
|
import { svgIcon } from "./components/svg-icon.js";
|
||||||
import { sidebarLibraryItem } from "./components/sidebar-library-item.js";
|
import { sidebarLibraryItem } from "./components/sidebar-library-item.js";
|
||||||
|
import { i18nEditor } from "./components/i18n-editor.js";
|
||||||
|
|
||||||
// Define window objects
|
// Define window objects
|
||||||
window.app = app;
|
window.app = app;
|
||||||
|
|
83
src/renderer/main/components/i18n-editor.js
Normal file
83
src/renderer/main/components/i18n-editor.js
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
import { html } from "../html.js";
|
||||||
|
|
||||||
|
export const i18nEditor = Vue.component("i18n-editor", {
|
||||||
|
// language=HTML
|
||||||
|
template: html`
|
||||||
|
<div class="content-inner i18n-page">
|
||||||
|
<div class="row nopadding">
|
||||||
|
<div class="col nopadding">
|
||||||
|
<h1>i18n Editor</h1>
|
||||||
|
</div>
|
||||||
|
<div class="col-auto nopadding selectCol">
|
||||||
|
<select class="md-select" @change="$root.setLz('');$root.setLzManual()" v-model="$root.cfg.general.language">
|
||||||
|
<optgroup :label="index" v-for="(categories, index) in getLanguages()">
|
||||||
|
<option v-for="lang in categories" :value="lang.code">
|
||||||
|
{{lang.nameNative}}
|
||||||
|
({{lang.nameEnglish }})
|
||||||
|
</option>
|
||||||
|
</optgroup>
|
||||||
|
</select>
|
||||||
|
<button class="md-btn" @click="exportLz">Export</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="md-option-container">
|
||||||
|
<template v-for="(val, key) in baseLz">
|
||||||
|
<div class="md-option-line" v-if="$root.lz[key]">
|
||||||
|
<div class="md-option-segment">
|
||||||
|
{{ key }}
|
||||||
|
</div>
|
||||||
|
<div class="md-option-segment">
|
||||||
|
<template v-if='typeof $root.lz[key] == "object"'>
|
||||||
|
<div v-for='(variant, vkey) in $root.lz[key]'>
|
||||||
|
{{variant}}
|
||||||
|
<input type="text" v-model="$root.lz[key][vkey]" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<textarea type="text" v-model="$root.lz[key]" v-else></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="md-option-line" v-else>
|
||||||
|
<div class="md-option-segment">
|
||||||
|
<b>{{ key }}</b>
|
||||||
|
</div>
|
||||||
|
<div class="md-option-segment">
|
||||||
|
<textarea type="text" v-model="$root.lz[key]" :placeholder="val"></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`,
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
listing: ipcRenderer.sendSync("get-i18n-listing"),
|
||||||
|
baseLz: ipcRenderer.sendSync("get-i18n", "en_US")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
exportLz() {
|
||||||
|
bootbox.alert(`<textarea spellcheck='false' style="width:100%;height: 300px;">${JSON.stringify(app.lz, true, ' ')}</textarea>`)
|
||||||
|
notyf.success("Copied to clipboard");
|
||||||
|
navigator.clipboard.writeText(JSON.stringify(app.lz, true, ' ')).then((r) => console.debug("Copied to clipboard."));
|
||||||
|
},
|
||||||
|
getLanguages: function () {
|
||||||
|
let langs = this.$root.lzListing
|
||||||
|
let categories = {
|
||||||
|
"main": [],
|
||||||
|
"fun": [],
|
||||||
|
"unsorted": []
|
||||||
|
}
|
||||||
|
// sort by category if category is undefined or empty put it in "unsorted"
|
||||||
|
for (let i = 0; i < langs.length; i++) {
|
||||||
|
if (langs[i].category === undefined || langs[i].category === "") {
|
||||||
|
categories.unsorted.push(langs[i])
|
||||||
|
} else {
|
||||||
|
categories[langs[i].category].push(langs[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// return
|
||||||
|
return categories
|
||||||
|
},
|
||||||
|
}
|
||||||
|
});
|
Loading…
Add table
Add a link
Reference in a new issue