`,
style: `
:host { display: flex; padding: 6px; flex-direction: column; }
:host .content { flex: 1; display: flex; flex-direction: column; }
header { margin-bottom: 6px; }
header > ui-button.refresh { float: right; }
section { flex: 1; background: var(--color-normal-fill-emphasis); border-radius: calc( var(--size-normal-radius)* 1px); padding: 4px; }
section > div { padding: 0 10px; }
section > div > .slider { margin-right: 4px; }
section > div > .option { float: right; display: none; }
section > div > ui-icon { cursor: pointer; color: var(--color-warn-fill-normal); }
section > div > ui-icon[value=eye-open] { color: var(--color-success-fill-normal); }
section > div > ui-icon[value=del] { color: var(--color-danger-fill-normal); }
section > div:hover { background: var(--color-normal-fill); border-radius: calc( var(--size-normal-radius)* 1px); }
section > div:hover > .option { display: inline; }
`,
$: {
content: '.content',
},
ready() {
const vm = new Vue({
el: this.$.content,
data: {
current: '',
list: [],
showAddInput: false,
},
watch: {
current() {
const vm = this;
Editor.Message.send('scene', 'execute-scene-script', {
name: 'i18n',
method: 'changeCurrentLanguage',
args: [vm.current || ''],
});
},
},
methods: {
add() {
vm.showAddInput = true;
requestAnimationFrame(() => {
vm.$refs.addInput.focus();
});
},
select(language) {
vm.current = language;
},
async del(name) {
const result = await Editor.Dialog.info(`确定删除 ${name} 语言文件?`, {
buttons: ['确认', '取消'],
default: 0,
cancel: 1,
});
if (result.response === 0) {
await Editor.Message.request('asset-db', 'delete-asset', `db://assets/resources/i18n/${name}.ts`);
vm.refresh();
}
},
async refresh() {
const dir = path_1.join(Editor.Project.path, 'assets/resources/i18n');
if (!fs_1.existsSync(dir)) {
return;
}
vm.current = await Editor.Message.request('scene', 'execute-scene-script', {
name: 'i18n',
method: 'queryCurrentLanguage',
args: [],
}) || '';
const names = fs_1.readdirSync(dir);
vm.$set(vm, 'list', []);
names.forEach((name) => {
const language = name.replace(/\.[^\.]+$/, '');
if (!/\./.test(language)) {
vm.list.push(language);
}
});
},
async generateLanguageFile(event) {
// @ts-ignore
const language = event.target.value;
if (!/[a-zA-Z]/.test(language)) {
console.warn(`语言名称只允许使用 a-z A-Z, ${language} 不合法`);
return;
}
const languageContent = languageContentTemplate.replace(/{{name}}/g, language);
vm.showAddInput = false;
await Editor.Message.request('asset-db', 'create-asset', `db://assets/resources/i18n/${language}.ts`, languageContent);
vm.refresh();
},
},
});
vm.refresh();
},
});