✨ Add i18n support
This commit is contained in:
@@ -28,6 +28,11 @@ export class AppConfig {
|
||||
*/
|
||||
"metadata": ConfigMetadata;
|
||||
|
||||
/**
|
||||
* 界面语言
|
||||
*/
|
||||
"language": LanguageType;
|
||||
|
||||
/** Creates a new AppConfig instance. */
|
||||
constructor($$source: Partial<AppConfig> = {}) {
|
||||
if (!("editor" in $$source)) {
|
||||
@@ -39,6 +44,9 @@ export class AppConfig {
|
||||
if (!("metadata" in $$source)) {
|
||||
this["metadata"] = (new ConfigMetadata());
|
||||
}
|
||||
if (!("language" in $$source)) {
|
||||
this["language"] = ("" as LanguageType);
|
||||
}
|
||||
|
||||
Object.assign(this, $$source);
|
||||
}
|
||||
@@ -158,6 +166,26 @@ export class EditorConfig {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* LanguageType 语言类型定义
|
||||
*/
|
||||
export enum LanguageType {
|
||||
/**
|
||||
* The Go zero value for the underlying type of the enum.
|
||||
*/
|
||||
$zero = "",
|
||||
|
||||
/**
|
||||
* LangZhCN 中文简体
|
||||
*/
|
||||
LangZhCN = "zh-CN",
|
||||
|
||||
/**
|
||||
* LangEnUS 英文-美国
|
||||
*/
|
||||
LangEnUS = "en-US",
|
||||
};
|
||||
|
||||
/**
|
||||
* PathConfig 定义配置文件路径相关配置
|
||||
*/
|
||||
|
@@ -46,6 +46,14 @@ export function GetFullConfigPath(): Promise<string> & { cancel(): void } {
|
||||
return $resultPromise;
|
||||
}
|
||||
|
||||
/**
|
||||
* GetLanguage 获取当前语言设置
|
||||
*/
|
||||
export function GetLanguage(): Promise<models$0.LanguageType> & { cancel(): void } {
|
||||
let $resultPromise = $Call.ByID(3409375894) as any;
|
||||
return $resultPromise;
|
||||
}
|
||||
|
||||
/**
|
||||
* ResetToDefault 重置为默认配置
|
||||
*/
|
||||
@@ -62,6 +70,14 @@ export function SaveAppConfig(config: models$0.AppConfig | null): Promise<void>
|
||||
return $resultPromise;
|
||||
}
|
||||
|
||||
/**
|
||||
* SetLanguage 设置语言
|
||||
*/
|
||||
export function SetLanguage(language: models$0.LanguageType): Promise<void> & { cancel(): void } {
|
||||
let $resultPromise = $Call.ByID(814725002, language) as any;
|
||||
return $resultPromise;
|
||||
}
|
||||
|
||||
/**
|
||||
* UpdateEditorConfig 更新编辑器配置
|
||||
*/
|
||||
|
@@ -1,6 +1,7 @@
|
||||
import {createI18n} from 'vue-i18n';
|
||||
import {useStorage} from '@vueuse/core';
|
||||
import messages from './locales';
|
||||
import { GetLanguage, SetLanguage } from '@/../bindings/voidraft/internal/services/configservice';
|
||||
import { LanguageType } from '@/../bindings/voidraft/internal/models';
|
||||
|
||||
// 定义支持的语言类型
|
||||
export type SupportedLocaleType = 'zh-CN' | 'en-US';
|
||||
@@ -27,29 +28,44 @@ const getBrowserLanguage = (): SupportedLocaleType => {
|
||||
locale.code.startsWith(langCode) || locale.code.split('-')[0] === langCode
|
||||
);
|
||||
|
||||
return supportedLang?.code || 'zh-CN'; // 默认为中文
|
||||
return supportedLang?.code || 'zh-CN';
|
||||
};
|
||||
|
||||
const storedLocale = useStorage<SupportedLocaleType>('voidraft-language', getBrowserLanguage());
|
||||
|
||||
// 创建i18n实例
|
||||
const i18n = createI18n({
|
||||
lobalInjection: true,
|
||||
locale: storedLocale.value,
|
||||
globalInjection: true,
|
||||
locale: 'zh-CN',
|
||||
fallbackLocale: 'zh-CN' as SupportedLocaleType,
|
||||
messages
|
||||
});
|
||||
|
||||
// 立即从后端获取语言设置
|
||||
GetLanguage().then(lang => {
|
||||
if (lang) {
|
||||
i18n.global.locale = lang as any;
|
||||
document.documentElement.setAttribute('lang', lang);
|
||||
}
|
||||
}).catch(error => {
|
||||
console.error('Failed to get language from backend:', error);
|
||||
// 如果获取失败,使用浏览器语言作为后备
|
||||
const browserLang = getBrowserLanguage();
|
||||
i18n.global.locale = browserLang as any;
|
||||
document.documentElement.setAttribute('lang', browserLang);
|
||||
});
|
||||
|
||||
// 切换语言的方法
|
||||
export const setLocale = (locale: SupportedLocaleType) => {
|
||||
if (SUPPORTED_LOCALES.some(l => l.code === locale)) {
|
||||
storedLocale.value = locale;
|
||||
// 更新后端配置
|
||||
SetLanguage(locale as LanguageType)
|
||||
.then(() => {
|
||||
i18n.global.locale = locale;
|
||||
document.documentElement.setAttribute('lang', locale);
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Failed to set language:', error);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// 初始设置html lang属性
|
||||
document.documentElement.setAttribute('lang', storedLocale.value);
|
||||
|
||||
export default i18n;
|
@@ -1,5 +1,5 @@
|
||||
import {defineStore} from 'pinia';
|
||||
import {ref, watch, inject} from 'vue';
|
||||
import {ref, watch} from 'vue';
|
||||
import {useDebounceFn} from '@vueuse/core';
|
||||
import {
|
||||
GetEditorConfig,
|
||||
|
@@ -23,6 +23,16 @@ type EditorConfig struct {
|
||||
TabType TabType `json:"tabType"` // Tab类型(空格或Tab)
|
||||
}
|
||||
|
||||
// LanguageType 语言类型定义
|
||||
type LanguageType string
|
||||
|
||||
const (
|
||||
// LangZhCN 中文简体
|
||||
LangZhCN LanguageType = "zh-CN"
|
||||
// LangEnUS 英文-美国
|
||||
LangEnUS LanguageType = "en-US"
|
||||
)
|
||||
|
||||
// PathConfig 定义配置文件路径相关配置
|
||||
type PathConfig struct {
|
||||
RootDir string `json:"rootDir"` // 根目录
|
||||
@@ -34,6 +44,7 @@ type AppConfig struct {
|
||||
Editor EditorConfig `json:"editor"` // 编辑器配置
|
||||
Paths PathConfig `json:"paths"` // 路径配置
|
||||
Metadata ConfigMetadata `json:"metadata"` // 配置元数据
|
||||
Language LanguageType `json:"language"` // 界面语言
|
||||
}
|
||||
|
||||
// ConfigMetadata 配置元数据
|
||||
@@ -60,5 +71,6 @@ func NewDefaultAppConfig() *AppConfig {
|
||||
Version: "1.0.0",
|
||||
LastUpdated: time.Now(),
|
||||
},
|
||||
Language: LangZhCN,
|
||||
}
|
||||
}
|
||||
|
@@ -314,6 +314,58 @@ func (cs *ConfigService) SaveAppConfig(config *models.AppConfig) error {
|
||||
return cs.saveAppConfig(config)
|
||||
}
|
||||
|
||||
// GetLanguage 获取当前语言设置
|
||||
func (cs *ConfigService) GetLanguage() (models.LanguageType, error) {
|
||||
// 如果内存中已有配置,直接返回
|
||||
if cs.config != nil {
|
||||
return cs.config.Language, nil
|
||||
}
|
||||
|
||||
// 否则从文件加载
|
||||
config, err := cs.loadAppConfig()
|
||||
if err != nil {
|
||||
log.Printf("GetLanguage: Failed to load config: %v", err)
|
||||
// 使用默认配置
|
||||
defaultConfig := models.NewDefaultAppConfig()
|
||||
cs.config = defaultConfig
|
||||
return defaultConfig.Language, nil
|
||||
}
|
||||
|
||||
// 更新内存中的配置
|
||||
cs.config = config
|
||||
log.Printf("GetLanguage: Retrieved language: %s", config.Language)
|
||||
return config.Language, nil
|
||||
}
|
||||
|
||||
// SetLanguage 设置语言
|
||||
func (cs *ConfigService) SetLanguage(language models.LanguageType) error {
|
||||
// 验证语言类型有效
|
||||
if language != models.LangZhCN && language != models.LangEnUS {
|
||||
return fmt.Errorf("unsupported language: %s", language)
|
||||
}
|
||||
|
||||
// 如果内存中已有配置,直接更新
|
||||
if cs.config != nil {
|
||||
log.Printf("SetLanguage: Updating language to: %s", language)
|
||||
cs.config.Language = language
|
||||
return cs.saveAppConfig(cs.config)
|
||||
}
|
||||
|
||||
// 没有内存中的配置,需要先加载
|
||||
config, err := cs.loadAppConfig()
|
||||
if err != nil {
|
||||
log.Printf("SetLanguage: Failed to load config: %v", err)
|
||||
// 使用默认配置
|
||||
config = models.NewDefaultAppConfig()
|
||||
}
|
||||
|
||||
// 更新语言配置
|
||||
config.Language = language
|
||||
|
||||
// 保存到文件
|
||||
return cs.saveAppConfig(config)
|
||||
}
|
||||
|
||||
// UpdateEditorConfig 更新编辑器配置
|
||||
func (cs *ConfigService) UpdateEditorConfig(editorConfig models.EditorConfig) error {
|
||||
// 如果内存中已有配置,直接更新
|
||||
|
Reference in New Issue
Block a user