feat(i18n): 为评论系统添加国际化支持
- 在管理后台引入 vue-i18n 并添加多语言文件 - 为前端评论组件添加翻译功能,支持自动语言检测 - 在功能设置中新增管理后台和组件语言配置选项 - 更新 API 接口以支持语言设置存储 - 优化菜单项文本溢出显示样式
This commit is contained in:
@@ -37,13 +37,18 @@ export const updateFeatureSettings = async (c: Context<{ Bindings: Bindings }>)
|
||||
const visibleDomains = Array.isArray(body.visibleDomains)
|
||||
? (body.visibleDomains as string[])
|
||||
: undefined;
|
||||
|
||||
const adminLanguage = typeof body.adminLanguage === 'string' ? body.adminLanguage : undefined;
|
||||
const widgetLanguage = typeof body.widgetLanguage === 'string' ? body.widgetLanguage : undefined;
|
||||
|
||||
await saveFeatureSettings(c.env, {
|
||||
enableCommentLike,
|
||||
enableArticleLike,
|
||||
enableImageLightbox,
|
||||
commentPlaceholder,
|
||||
visibleDomains
|
||||
visibleDomains,
|
||||
adminLanguage,
|
||||
widgetLanguage
|
||||
});
|
||||
|
||||
return c.json({ message: '保存成功!' });
|
||||
|
||||
@@ -5,6 +5,8 @@ export const FEATURE_ARTICLE_LIKE_KEY = 'comment_feature_article_like';
|
||||
export const FEATURE_IMAGE_LIGHTBOX_KEY = 'comment_feature_image_lightbox';
|
||||
export const FEATURE_COMMENT_PLACEHOLDER_KEY = 'comment_feature_placeholder';
|
||||
export const FEATURE_VISIBLE_DOMAINS_KEY = 'admin_visible_domains';
|
||||
export const FEATURE_ADMIN_LANGUAGE_KEY = 'admin_language';
|
||||
export const FEATURE_WIDGET_LANGUAGE_KEY = 'widget_language';
|
||||
|
||||
export type FeatureSettings = {
|
||||
enableCommentLike: boolean;
|
||||
@@ -12,6 +14,8 @@ export type FeatureSettings = {
|
||||
enableImageLightbox: boolean;
|
||||
commentPlaceholder?: string;
|
||||
visibleDomains?: string[];
|
||||
adminLanguage?: string;
|
||||
widgetLanguage?: string;
|
||||
};
|
||||
|
||||
export async function loadFeatureSettings(env: Bindings): Promise<FeatureSettings> {
|
||||
@@ -24,10 +28,12 @@ export async function loadFeatureSettings(env: Bindings): Promise<FeatureSetting
|
||||
FEATURE_ARTICLE_LIKE_KEY,
|
||||
FEATURE_IMAGE_LIGHTBOX_KEY,
|
||||
FEATURE_COMMENT_PLACEHOLDER_KEY,
|
||||
FEATURE_VISIBLE_DOMAINS_KEY
|
||||
FEATURE_VISIBLE_DOMAINS_KEY,
|
||||
FEATURE_ADMIN_LANGUAGE_KEY,
|
||||
FEATURE_WIDGET_LANGUAGE_KEY
|
||||
];
|
||||
const { results } = await env.CWD_DB.prepare(
|
||||
'SELECT key, value FROM Settings WHERE key IN (?, ?, ?, ?, ?)'
|
||||
'SELECT key, value FROM Settings WHERE key IN (?, ?, ?, ?, ?, ?, ?)'
|
||||
)
|
||||
.bind(...keys)
|
||||
.all<{ key: string; value: string }>();
|
||||
@@ -63,6 +69,8 @@ export async function loadFeatureSettings(env: Bindings): Promise<FeatureSetting
|
||||
const enableImageLightbox = enableImageLightboxRaw === '1';
|
||||
|
||||
const commentPlaceholder = map.get(FEATURE_COMMENT_PLACEHOLDER_KEY);
|
||||
const adminLanguage = map.get(FEATURE_ADMIN_LANGUAGE_KEY);
|
||||
const widgetLanguage = map.get(FEATURE_WIDGET_LANGUAGE_KEY);
|
||||
|
||||
let visibleDomains: string[] | undefined;
|
||||
const visibleDomainsRaw = map.get(FEATURE_VISIBLE_DOMAINS_KEY);
|
||||
@@ -79,7 +87,9 @@ export async function loadFeatureSettings(env: Bindings): Promise<FeatureSetting
|
||||
enableArticleLike,
|
||||
enableImageLightbox,
|
||||
commentPlaceholder,
|
||||
visibleDomains
|
||||
visibleDomains,
|
||||
adminLanguage,
|
||||
widgetLanguage
|
||||
};
|
||||
}
|
||||
|
||||
@@ -126,6 +136,14 @@ export async function saveFeatureSettings(
|
||||
{
|
||||
key: FEATURE_VISIBLE_DOMAINS_KEY,
|
||||
value: settings.visibleDomains ? JSON.stringify(settings.visibleDomains) : undefined
|
||||
},
|
||||
{
|
||||
key: FEATURE_ADMIN_LANGUAGE_KEY,
|
||||
value: settings.adminLanguage
|
||||
},
|
||||
{
|
||||
key: FEATURE_WIDGET_LANGUAGE_KEY,
|
||||
value: settings.widgetLanguage
|
||||
}
|
||||
];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user