♻️ refactor(i18n): Refactor i18n with api [#270]

pull/290/head
canisminor1990 2023-07-16 13:55:51 +08:00
parent d4c4a48e80
commit 8753ef6369
27 changed files with 562 additions and 566 deletions

16
.i18nrc.js Normal file
View File

@ -0,0 +1,16 @@
const { description } = require('./package.json');
const { defineConfig } = require('@lobehub/i18n-cli');
const options = require('./locales/options.json');
const outputLocales = options.map((item) => item.value).filter((item) => item !== 'en_US');
module.exports = defineConfig({
reference: description,
entry: 'locales/en_US.json',
entryLocale: 'en_US',
output: 'locales',
outputLocales: outputLocales,
splitToken: 2500,
temperature: 0,
modelName: 'gpt-3.5-turbo',
});

View File

@ -56,7 +56,7 @@
- [x] 🎛️ 高定制侧边栏,左侧为快捷设置侧边栏,右侧为模型侧边栏
- [x] 🖼️ 可调节画板比例,使生成图像始终置顶
- [x] 📱 移动端友好,针对手机屏幕完成部分优化
- [x] 🌍 支持 i18n 并欢迎提交 [PR](https://github.com/canisminor1990/sd-webui-lobe-theme/tree/main/src/i18n/lang) 贡献
- [x] 🌍 支持 i18n 并欢迎提交 [PR](https://github.com/canisminor1990/sd-webui-lobe-theme/tree/main/locales) 贡献
- [x] 📝 语法高亮的 Prompt 输入框
- [x] 📦 支持 [PWA](https://support.google.com/chrome/answer/9658361?hl=zh-Hans) 渐进式 Web 应用

View File

@ -56,7 +56,7 @@ English · [简体中文](./README-zh_CN.md) · [Changelog](./CHANGELOG.md) · [
- [x] 🎛️ Highly customizable sidebar, with a quick settings sidebar on the left and a model sidebar on the right
- [x] 🖼️ Adjustable canvas ratio, ensuring that generated images are always displayed at the top
- [x] 📱 Mobile-friendly, with partial optimization for mobile screens
- [x] 🌍Support i18n and welcome [PR](https://github.com/canisminor1990/sd-webui-lobe-theme/tree/main/src/i18n/lang) contributions
- [x] 🌍Support i18n and welcome [PR](https://github.com/canisminor1990/sd-webui-lobe-theme/tree/main/locales) contributions
- [x] 📝 Syntax highlighting in the prompt input box
- [x] 📦 Support [PWA](https://support.google.com/chrome/answer/9658361) progressive web app

File diff suppressed because one or more lines are too long

79
locales/en_US.json Normal file
View File

@ -0,0 +1,79 @@
{
"community": "Community",
"custom": "Custom",
"extraNetwork": "Extra Network",
"feedback": "Feedback",
"fixed": "Fixed",
"float": "Float",
"help": "Help",
"kitchen": "Kitchen",
"loadPrompt": "Load Prompt",
"lobe": "Lobe",
"moreProducts": "More Products",
"negative": "Negative",
"positive": "Positive",
"quickSetting": "Quick Setting",
"resizable": "Resizable",
"resources": "Resources",
"scroll": "Scroll",
"setPrompt": "Set Prompt",
"setting": "Setting",
"settingButtomReset": "Reset",
"settingButtomSubmit": "Apply and Restart Interface",
"settingCustomFont": "Load Custom Font",
"settingCustomFontDesc": "When enabled, it will automatically load a webfont to enhance the display of text in Chinese, English, and code",
"settingCustomLogo": "Custom Logo",
"settingCustomLogoDesc": "Support URL / Base64 / Emoji symbols",
"settingCustomTitle": "Custom Title",
"settingCustomTitleDesc": "Custom Logo Title",
"settingExtraNetworkSidebarDefaultCardSize": "Model Cover Size",
"settingExtraNetworkSidebarDefaultCardSizeDesc": "Default value of model cover size when starting",
"settingExtraNetworkSidebarDefaultExpand": "Default Expand",
"settingExtraNetworkSidebarDefaultExpandDesc": "Whether to expand the sidebar by default when starting",
"settingExtraNetworkSidebarDefaultWidth": "Default Width",
"settingExtraNetworkSidebarDefaultWidthDesc": "Default width of the sidebar when starting",
"settingExtraNetworkSidebarDisplayMode": "Display Mode",
"settingExtraNetworkSidebarDisplayModeDesc": "Fixed as grid mode for constant display, auto-expand when the mouse moves to the side in floating mode",
"settingExtraNetworkSidebarEnable": "Enable",
"settingExtraNetworkSidebarEnableDesc": "Enable the extra network sidebar on the right side",
"settingGroupExtraNetworkSidebar": "Extra Network Sidebar",
"settingGroupLayout": "Layout Settings",
"settingGroupPromotTextarea": "Prompt Textbox",
"settingGroupQuickSettingSidebar": "Quick Setting Sidebar",
"settingGroupTheme": "Theme Settings",
"settingHideFooter": "Hide Footer",
"settingHideFooterDesc": "Hide the theme footer and only display the default footer of stable diffusion webui",
"settingLanguage": "Language",
"settingLanguageDesc": "Lobe Theme language",
"settingLogoPreview": "Preview",
"settingLogoType": "Logo Type",
"settingLogoTypeDesc": "Logo Type",
"settingNeutralColor": "Neutral Color",
"settingNeutralColorDesc": "Customize different shades of gray with different color tendencies, the second one is the original Kitchen neutral color",
"settingPrimaryColor": "Primary Color",
"settingPrimaryColorDesc": "Custom primary color, the second one is the original Kitchen theme color",
"settingPromptDisplayMode": "Display Mode",
"settingPromptDisplayModeDesc": "Fixed height or auto height with draggable resize support",
"settingPromptEditor": "Prompt Editor",
"settingPromptEditorDesc": "Provide a simple prompt editor at the top of the quick setting sidebar",
"settingPromptHighlight": "Prompt Syntax Highlighting",
"settingPromptHighlightDesc": "Automatically colorize prompt display according to the Stable Diffusion syntax rules",
"settingQuickSettingSidebarDefaultExpand": "Default Expand",
"settingQuickSettingSidebarDefaultExpandDesc": "Whether to expand the sidebar by default when starting",
"settingQuickSettingSidebarDefaultWidth": "Default Width",
"settingQuickSettingSidebarDefaultWidthDesc": "Default width of the sidebar when starting",
"settingQuickSettingSidebarDisplayMode": "Display Mode",
"settingQuickSettingSidebarDisplayModeDesc": "Fixed as grid mode for constant display, auto-expand when the mouse moves to the side in floating mode",
"settingQuickSettingSidebarEnable": "Enable",
"settingQuickSettingSidebarEnableDesc": "Enable the quick setting sidebar on the left side",
"settingReduceAnimation": "Reduce Animation",
"settingReduceAnimationDesc": "Reduce the blur effect and background flow color, which can improve smoothness and save CPU usage",
"settingSplitPreviewer": "Split Previewer",
"settingSplitPreviewerDesc": "Put the prompt input box on the left and the generate button on the right, ensuring that the generated image is always displayed at the top when scrolling (experimental)",
"settingSvgIcons": "Use SVG Icons",
"settingSvgIconsDesc": "Replace all Emoji icons in stable diffusion webui with SVG icons globally",
"switchTheme": "Switch Light/Dark Theme",
"sync": "Sync with webui setting",
"themeFeedback": "Theme Feedback",
"themeSetting": "Theme Settings"
}

79
locales/ja_JP.json Normal file
View File

@ -0,0 +1,79 @@
{
"community": "コミュニティ",
"custom": "カスタム",
"extraNetwork": "追加ネットワーク",
"feedback": "フィードバック",
"fixed": "固定",
"float": "フロート",
"help": "ヘルプ",
"kitchen": "キッチン",
"loadPrompt": "プロンプトをロード",
"lobe": "ローブ",
"moreProducts": "その他の製品",
"negative": "ネガティブなヒント",
"positive": "ポジティブなヒント",
"quickSetting": "クイック設定",
"resizable": "リサイズ可能",
"resources": "関連リソース",
"scroll": "スクロール",
"setPrompt": "プロンプトを設定",
"setting": "設定",
"settingButtomReset": "リセット",
"settingButtomSubmit": "適用して再起動",
"settingCustomFont": "カスタムフォントの読み込み",
"settingCustomFontDesc": "有効にすると、Webフォントを自動的に読み込んで、英語、中国語、およびコードの表示効果を最適化します",
"settingCustomLogo": "カスタムロゴ",
"settingCustomLogoDesc": "URL / Base64 / 絵文字をサポート",
"settingCustomTitle": "カスタムタイトル",
"settingCustomTitleDesc": "カスタムロゴのタイトル名",
"settingExtraNetworkSidebarDefaultCardSize": "モデルカバーサイズ",
"settingExtraNetworkSidebarDefaultCardSizeDesc": "起動時のモデルカバーサイズのデフォルト値",
"settingExtraNetworkSidebarDefaultExpand": "デフォルトで展開",
"settingExtraNetworkSidebarDefaultExpandDesc": "起動時にサイドバーをデフォルトで展開しますか?",
"settingExtraNetworkSidebarDefaultWidth": "デフォルト幅",
"settingExtraNetworkSidebarDefaultWidthDesc": "起動時のサイドバーのデフォルト幅",
"settingExtraNetworkSidebarDisplayMode": "表示モード",
"settingExtraNetworkSidebarDisplayModeDesc": "グリッドモードで常に表示するか、ホバー時に自動的に展開するフロートモードで表示するか",
"settingExtraNetworkSidebarEnable": "有効にする",
"settingExtraNetworkSidebarEnableDesc": "右側の追加ネットワークサイドバーを有効にする",
"settingGroupExtraNetworkSidebar": "追加ネットワークサイドバー",
"settingGroupLayout": "レイアウト設定",
"settingGroupPromotTextarea": "プロンプトテキストエリア",
"settingGroupQuickSettingSidebar": "クイック設定サイドバー",
"settingGroupTheme": "テーマ設定",
"settingHideFooter": "フッターを非表示にする",
"settingHideFooterDesc": "テーマのフッターを非表示にし、stable diffusion webui のデフォルトフッターのみ表示します",
"settingLanguage": "言語",
"settingLanguageDesc": "Lobe Themeの言語",
"settingLogoPreview": "プレビュー",
"settingLogoType": "ロゴタイプ",
"settingLogoTypeDesc": "ロゴタイプ",
"settingNeutralColor": "中立色",
"settingNeutralColorDesc": "異なる色相のグレースケールのカスタマイズ。2番目は元のKitchenの中立色です",
"settingPrimaryColor": "プライマリカラー",
"settingPrimaryColorDesc": "カスタムプライマリカラー。2番目は元のKitchenのプライマリカラーです",
"settingPromptDisplayMode": "表示モード",
"settingPromptDisplayModeDesc": "固定の高さまたはドラッグリサイズをサポートする自動の高さ",
"settingPromptEditor": "プロンプトエディタ",
"settingPromptEditorDesc": "クイック設定サイドバーの上部に簡単なプロンプトエディタを提供します",
"settingPromptHighlight": "Promptのシンタックスハイライト",
"settingPromptHighlightDesc": "Stable Diffusionのシンタックスルールに基づいて、promptの表示を自動的にハイライトします",
"settingQuickSettingSidebarDefaultExpand": "デフォルトで展開",
"settingQuickSettingSidebarDefaultExpandDesc": "起動時にサイドバーをデフォルトで展開しますか?",
"settingQuickSettingSidebarDefaultWidth": "デフォルト幅",
"settingQuickSettingSidebarDefaultWidthDesc": "起動時のサイドバーのデフォルト幅",
"settingQuickSettingSidebarDisplayMode": "表示モード",
"settingQuickSettingSidebarDisplayModeDesc": "グリッドモードで常に表示するか、ホバー時に自動的に展開するフロートモードで表示するか",
"settingQuickSettingSidebarEnable": "有効にする",
"settingQuickSettingSidebarEnableDesc": "左側のクイック設定サイドバーを有効にする",
"settingReduceAnimation": "アニメーションを削減",
"settingReduceAnimationDesc": "ガラスのエフェクトと背景の流れる色を削減し、スムーズさを向上させ、CPUの使用量を節約できます",
"settingSplitPreviewer": "2列モード",
"settingSplitPreviewerDesc": "プロンプト入力ボックスを左側に配置し、生成ボタンを右側に配置し、スクロール時に生成された画像が常にトップに表示されるようにします(実験的)",
"settingSvgIcons": "SVGアイコンを使用",
"settingSvgIconsDesc": "stable diffusion webuiの絵文字アイコンをすべてSVGアイコンに置き換えます",
"switchTheme": "明暗テーマを切り替える",
"sync": "WebUIの設定と同期する",
"themeFeedback": "テーマのフィードバック",
"themeSetting": "テーマ設定"
}

79
locales/ko_KR.json Normal file
View File

@ -0,0 +1,79 @@
{
"community": "커뮤니티",
"custom": "사용자 정의",
"extraNetwork": "추가 네트워크",
"feedback": "피드백",
"fixed": "고정",
"float": "부유",
"help": "도움말",
"kitchen": "Kitchen",
"loadPrompt": "로드 프롬프트",
"lobe": "Lobe",
"moreProducts": "더 많은 제품",
"negative": "부정적인",
"positive": "긍정적인",
"quickSetting": "빠른 설정",
"resizable": "크기 조절 가능",
"resources": "관련 자료",
"scroll": "스크롤",
"setPrompt": "프롬프트 설정",
"setting": "설정",
"settingButtomReset": "재설정",
"settingButtomSubmit": "적용 및 인터페이스 재시작",
"settingCustomFont": "폰트 로드",
"settingCustomFontDesc": "이 기능을 사용하면 웹 폰트를 자동으로 로드하여 영문, 한글 및 코드 표시 효과를 최적화합니다",
"settingCustomLogo": "사용자 정의 로고",
"settingCustomLogoDesc": "URL / Base64 / 이모지 표정을 지원합니다.",
"settingCustomTitle": "사용자 정의 제목",
"settingCustomTitleDesc": "사용자 정의 로고 제목",
"settingExtraNetworkSidebarDefaultCardSize": "모델 커버 크기",
"settingExtraNetworkSidebarDefaultCardSizeDesc": "시작시 모델 커버 크기 기본값",
"settingExtraNetworkSidebarDefaultExpand": "기본 확장",
"settingExtraNetworkSidebarDefaultExpandDesc": "시작시 사이드바 기본 확장 여부",
"settingExtraNetworkSidebarDefaultWidth": "기본 너비",
"settingExtraNetworkSidebarDefaultWidthDesc": "시작시 사이드바 기본 너비",
"settingExtraNetworkSidebarDisplayMode": "표시 모드",
"settingExtraNetworkSidebarDisplayModeDesc": "그리드 모드로 고정하여 항상 표시하거나, 부유 모드로 설정하여 사이드바에 마우스를 가져가면 자동으로 확장",
"settingExtraNetworkSidebarEnable": "사용",
"settingExtraNetworkSidebarEnableDesc": "오른쪽에 추가 네트워크 사이드바 활성화",
"settingGroupExtraNetworkSidebar": "추가 네트워크 사이드바",
"settingGroupLayout": "레이아웃 설정",
"settingGroupPromotTextarea": "프롬프트 텍스트 영역",
"settingGroupQuickSettingSidebar": "빠른 설정 사이드바",
"settingGroupTheme": "테마 설정",
"settingHideFooter": "푸터 숨기기",
"settingHideFooterDesc": "테마 푸터를 숨기고 stable diffusion webui의 기본 푸터만 표시",
"settingLanguage": "언어",
"settingLanguageDesc": "Lobe Theme 테마 언어",
"settingLogoPreview": "미리보기",
"settingLogoType": "로고 유형",
"settingLogoTypeDesc": "로고 유형",
"settingNeutralColor": "중립색",
"settingNeutralColorDesc": "다른 색상 경향의 그레이 스케일 사용자 정의, 두 번째는 원래 Kitchen의 중립색",
"settingPrimaryColor": "기본 색상",
"settingPrimaryColorDesc": "사용자 정의 기본 색상, 두 번째는 원래 Kitchen의 기본 색상",
"settingPromptDisplayMode": "표시 모드",
"settingPromptDisplayModeDesc": "고정 높이 또는 자동 높이 및 드래그 조절 지원",
"settingPromptEditor": "프롬프트 편집기",
"settingPromptEditorDesc": "빠른 설정 사이드바 상단에 간단한 프롬프트 편집기 제공",
"settingPromptHighlight": "Prompt 구문 강조",
"settingPromptHighlightDesc": "Stable Diffusion 구문 규칙에 따라 자동으로 prompt를 강조하여 표시합니다",
"settingQuickSettingSidebarDefaultExpand": "기본 확장",
"settingQuickSettingSidebarDefaultExpandDesc": "시작시 사이드바 기본 확장 여부",
"settingQuickSettingSidebarDefaultWidth": "기본 너비",
"settingQuickSettingSidebarDefaultWidthDesc": "시작시 사이드바 기본 너비",
"settingQuickSettingSidebarDisplayMode": "표시 모드",
"settingQuickSettingSidebarDisplayModeDesc": "그리드 모드로 고정하여 항상 표시하거나, 부유 모드로 설정하여 사이드바에 마우스를 가져가면 자동으로 확장",
"settingQuickSettingSidebarEnable": "사용",
"settingQuickSettingSidebarEnableDesc": "왼쪽에 빠른 설정 사이드바 활성화",
"settingReduceAnimation": "애니메이션 줄이기",
"settingReduceAnimationDesc": "유리 효과와 배경 흐름 색상을 줄여서 부드러움을 향상시키고 CPU 사용량을 줄일 수 있습니다.",
"settingSplitPreviewer": "이중 열 모드",
"settingSplitPreviewerDesc": "프롬프트 입력 상자를 왼쪽에 배치하고, 우측에 생성 버튼을 두어 스크롤 시 생성된 이미지가 항상 위에 표시되도록 합니다 (실험적)",
"settingSvgIcons": "SVG 아이콘 사용",
"settingSvgIconsDesc": "stable diffusion webui의 이모지 아이콘을 전역적으로 SVG 아이콘으로 교체합니다.",
"switchTheme": "밝기 테마 전환",
"sync": "웹 UI 설정과 동기화",
"themeFeedback": "테마 피드백",
"themeSetting": "테마 설정"
}

22
locales/options.json Normal file
View File

@ -0,0 +1,22 @@
[
{
"label": "English",
"value": "en_US"
},
{
"label": "简体中文",
"value": "zh_CN"
},
{
"label": "繁體中文",
"value": "zh_HK"
},
{
"label": "日本語",
"value": "ja_JP"
},
{
"label": "한국어",
"value": "ko_KR"
}
]

79
locales/zh_CN.json Normal file
View File

@ -0,0 +1,79 @@
{
"community": "社区",
"custom": "自定义",
"extraNetwork": "附加网络",
"feedback": "反馈",
"fixed": "固定",
"float": "悬浮",
"help": "帮助",
"kitchen": "Kitchen",
"loadPrompt": "加载提示",
"lobe": "Lobe",
"moreProducts": "更多产品",
"negative": "反向提示词",
"positive": "正面提示词",
"quickSetting": "快捷设置",
"resizable": "缩放",
"resources": "相关资源",
"scroll": "滚动",
"setPrompt": "发送提示词",
"setting": "设置",
"settingButtomReset": "重置",
"settingButtomSubmit": "应用并重启界面",
"settingCustomFont": "加载字体美化",
"settingCustomFontDesc": "开启后会自动加载 Webfont 美化字体,优化中英文和代码显示效果",
"settingCustomLogo": "自定义 Logo",
"settingCustomLogoDesc": "支持 URL / Base64 / Emoji 表情符号",
"settingCustomTitle": "自定义标题",
"settingCustomTitleDesc": "自定义 Logo 标题名称",
"settingExtraNetworkSidebarDefaultCardSize": "模型封面尺寸",
"settingExtraNetworkSidebarDefaultCardSizeDesc": "启动时模型封面尺寸默认值",
"settingExtraNetworkSidebarDefaultExpand": "默认展开",
"settingExtraNetworkSidebarDefaultExpandDesc": "是否在启动时将侧边栏默认展开",
"settingExtraNetworkSidebarDefaultWidth": "默认宽度",
"settingExtraNetworkSidebarDefaultWidthDesc": "侧边栏在启动时的默认宽度",
"settingExtraNetworkSidebarDisplayMode": "显示模式",
"settingExtraNetworkSidebarDisplayModeDesc": "固定为栅格模式常驻显示,悬浮模式时当鼠标移到侧边时自动展开",
"settingExtraNetworkSidebarEnable": "启用",
"settingExtraNetworkSidebarEnableDesc": "启用位于右侧的附加网络侧边栏",
"settingGroupExtraNetworkSidebar": "附加网络侧边栏",
"settingGroupLayout": "布局设置",
"settingGroupPromotTextarea": "提示词文本框",
"settingGroupQuickSettingSidebar": "快捷设置侧边栏",
"settingGroupTheme": "主题设置",
"settingHideFooter": "隐藏页脚",
"settingHideFooterDesc": "隐藏主题页脚,只显示 stable diffusion webui 默认页脚",
"settingLanguage": "语言",
"settingLanguageDesc": "Lobe Theme 主题语言",
"settingLogoPreview": "预览",
"settingLogoType": "Logo 类型",
"settingLogoTypeDesc": "Logo 类型",
"settingNeutralColor": "中性色",
"settingNeutralColorDesc": "不同色彩倾向的灰阶自定义,第二个为原始 Kitchen 中性色",
"settingPrimaryColor": "主题色",
"settingPrimaryColorDesc": "自定义主题色,第二个为原始 Kitchen 主题色",
"settingPromptDisplayMode": "显示模式",
"settingPromptDisplayModeDesc": "固定高度或自动高度并支持拖拽拉伸",
"settingPromptEditor": "提示词编辑器",
"settingPromptEditorDesc": "提供简易的提示词编辑器位于快捷设置侧边栏顶部",
"settingPromptHighlight": "Prompt 语法高亮",
"settingPromptHighlightDesc": "按 Stable Diffusion 语法规则,自动染色 prompt 显示",
"settingQuickSettingSidebarDefaultExpand": "默认展开",
"settingQuickSettingSidebarDefaultExpandDesc": "是否在启动时将侧边栏默认展开",
"settingQuickSettingSidebarDefaultWidth": "默认宽度",
"settingQuickSettingSidebarDefaultWidthDesc": "侧边栏在启动时的默认宽度",
"settingQuickSettingSidebarDisplayMode": "显示模式",
"settingQuickSettingSidebarDisplayModeDesc": "固定为栅格模式常驻显示,悬浮模式时当鼠标移到侧边时自动展开",
"settingQuickSettingSidebarEnable": "启用",
"settingQuickSettingSidebarEnableDesc": "启用位于左侧的快捷设置侧边栏",
"settingReduceAnimation": "减少动画效果",
"settingReduceAnimationDesc": "减少毛玻璃效果和背景流动色,可以提升流畅度并节省 CPU 使用",
"settingSplitPreviewer": "双列模式",
"settingSplitPreviewerDesc": "将提示词输入框放在左侧,生成按钮于右侧,确保在滚动时生成的图像始终显示在顶部 (实验性)",
"settingSvgIcons": "使用 SVG 图标",
"settingSvgIconsDesc": "将 stable diffusion webui 中的 Emoji 图标全局替换为 SVG 图标",
"switchTheme": "切换亮暗色主题",
"sync": "与 WebUI 设置同步",
"themeFeedback": "主题反馈",
"themeSetting": "主题设置"
}

79
locales/zh_HK.json Normal file
View File

@ -0,0 +1,79 @@
{
"community": "社區",
"custom": "自訂",
"extraNetwork": "附加網絡",
"feedback": "反饋",
"fixed": "固定",
"float": "懸浮",
"help": "幫助",
"kitchen": "Kitchen",
"loadPrompt": "加載提示",
"lobe": "Lobe",
"moreProducts": "更多產品",
"negative": "反向提示詞",
"positive": "正面提示詞",
"quickSetting": "快捷設置",
"resizable": "縮放",
"resources": "相關資源",
"scroll": "滾動",
"setPrompt": "發送提示詞",
"setting": "設置",
"settingButtomReset": "重置",
"settingButtomSubmit": "應用並重啟界面",
"settingCustomFont": "載入字型美化",
"settingCustomFontDesc": "開啟後會自動載入 Webfont 美化字型,優化中英文和程式碼顯示效果",
"settingCustomLogo": "自定義 Logo",
"settingCustomLogoDesc": "支持 URL / Base64 / Emoji 表情符號",
"settingCustomTitle": "自定義標題",
"settingCustomTitleDesc": "自定義 Logo 標題名稱",
"settingExtraNetworkSidebarDefaultCardSize": "模型封面尺寸",
"settingExtraNetworkSidebarDefaultCardSizeDesc": "啟動時模型封面尺寸默認值",
"settingExtraNetworkSidebarDefaultExpand": "默認展開",
"settingExtraNetworkSidebarDefaultExpandDesc": "是否在啟動時將側邊欄默認展開",
"settingExtraNetworkSidebarDefaultWidth": "默認寬度",
"settingExtraNetworkSidebarDefaultWidthDesc": "側邊欄在啟動時的默認寬度",
"settingExtraNetworkSidebarDisplayMode": "顯示模式",
"settingExtraNetworkSidebarDisplayModeDesc": "固定為格模式常駐顯示,懸浮模式時當鼠標移到側邊時自動展開",
"settingExtraNetworkSidebarEnable": "啟用",
"settingExtraNetworkSidebarEnableDesc": "啟用位於右側的附加網絡側邊欄",
"settingGroupExtraNetworkSidebar": "附加網絡側邊欄",
"settingGroupLayout": "佈局設置",
"settingGroupPromotTextarea": "提示詞文本框",
"settingGroupQuickSettingSidebar": "快捷設置側邊欄",
"settingGroupTheme": "主題設置",
"settingHideFooter": "隱藏頁腳",
"settingHideFooterDesc": "隱藏主題頁腳,只顯示 stable diffusion webui 默認頁腳",
"settingLanguage": "語言",
"settingLanguageDesc": "Lobe Theme 主題語言",
"settingLogoPreview": "預覽",
"settingLogoType": "Logo 類型",
"settingLogoTypeDesc": "Logo 類型",
"settingNeutralColor": "中性色",
"settingNeutralColorDesc": "不同色彩傾向的灰階自定義,第二個為原始 Kitchen 中性色",
"settingPrimaryColor": "主題色",
"settingPrimaryColorDesc": "自定義主題色,第二個為原始 Kitchen 主題色",
"settingPromptDisplayMode": "顯示模式",
"settingPromptDisplayModeDesc": "固定高度或自動高度並支持拖拽拉伸",
"settingPromptEditor": "提示詞編輯器",
"settingPromptEditorDesc": "提供簡易的提示詞編輯器位於快捷設置側邊欄頂部",
"settingPromptHighlight": "Prompt 語法高亮",
"settingPromptHighlightDesc": "按照 Stable Diffusion 語法規則,自動著色 prompt 顯示",
"settingQuickSettingSidebarDefaultExpand": "默認展開",
"settingQuickSettingSidebarDefaultExpandDesc": "是否在啟動時將側邊欄默認展開",
"settingQuickSettingSidebarDefaultWidth": "默認寬度",
"settingQuickSettingSidebarDefaultWidthDesc": "側邊欄在啟動時的默認寬度",
"settingQuickSettingSidebarDisplayMode": "顯示模式",
"settingQuickSettingSidebarDisplayModeDesc": "固定為格模式常駐顯示,懸浮模式時當鼠標移到側邊時自動展開",
"settingQuickSettingSidebarEnable": "啟用",
"settingQuickSettingSidebarEnableDesc": "啟用位於左側的快捷設置側邊欄",
"settingReduceAnimation": "減少動畫效果",
"settingReduceAnimationDesc": "減少毛玻璃效果和背景流動色,可以提升流暢度並節省 CPU 使用",
"settingSplitPreviewer": "雙列模式",
"settingSplitPreviewerDesc": "將提示詞輸入框放在左側,生成按鈕於右側,確保在滾動時生成的圖像始終顯示在頂部 (實驗性)",
"settingSvgIcons": "使用 SVG 圖標",
"settingSvgIconsDesc": "將 stable diffusion webui 中的 Emoji 圖標全局替換為 SVG 圖標",
"switchTheme": "切換亮暗色主題",
"sync": "與 WebUI 設置同步",
"themeFeedback": "主題反饋",
"themeSetting": "主題設置"
}

View File

@ -28,6 +28,7 @@
"build": "vite build",
"dev": "vite",
"dev:sd": "cd ../../ && ./webui.sh",
"i18n": "lobe-i18n",
"lint": "eslint \"src/**/*.{js,jsx,ts,tsx}\" --fix",
"lint:md": "remark . --quiet --output",
"lint:style": "stylelint \"src/**/*.{css,less,js,jsx,ts,tsx}\" --fix",
@ -64,6 +65,7 @@
"devDependencies": {
"@babel/plugin-syntax-import-assertions": "^7",
"@commitlint/cli": "^17",
"@lobehub/i18n-cli": "latest",
"@lobehub/lint": "latest",
"@lobehub/ui": "latest",
"@types/lodash-es": "^4",
@ -86,6 +88,7 @@
"fast-deep-equal": "^3",
"husky": "^8",
"i18next": "^23",
"i18next-http-backend": "^2.2.1",
"lint-staged": "^13",
"lodash-es": "^4",
"lucide-react": "latest",

View File

@ -5,12 +5,14 @@ from fastapi import FastAPI, Response, Request
from scripts.lib.config import LobeConfig
from scripts.lib.package import LobePackage
from scripts.lib.locale import LobeLocale
from scripts.lib.lobe_log import LobeLog
class LobeApi:
def __init__(self, config: LobeConfig, package: LobePackage):
def __init__(self, config: LobeConfig, package: LobePackage, locale: LobeLocale):
self.package = package
self.config = config
self.locale = locale
pass
def create_api_route(self, app: FastAPI):
@ -23,6 +25,14 @@ class LobeApi:
return Response(content=self.package.json(), media_type="application/json", status_code=404)
return Response(content=self.package.json(), media_type="application/json", status_code=200)
@app.get("/lobe/locales/{lng}")
async def lobe_locale_get(lng: str):
LobeLog.debug(f"lobe_locale_get: {lng}")
language_data = self.locale.get_language_file(lng)
return Response(content=json.dumps(language_data), media_type="application/json", status_code=200)
@app.get("/lobe/config")
async def lobe_config_get():
LobeLog.debug("lobe_config_get")

View File

@ -26,7 +26,7 @@ class LobePackage:
self.package = json.load(f)
else:
LobeLog.debug(f"Package file not found")
self.package = LobeConfig.default()
self.package = {"error": "Package file not found"}
def is_empty(self):
return "empty" in self.package and self.package['empty']

View File

@ -11,13 +11,15 @@ from scripts.lib.lobe_log import LobeLog
from scripts.lib.api import LobeApi
from scripts.lib.config import LobeConfig
from scripts.lib.package import LobePackage
from scripts.lib.locale import LobeLocale
def init_lobe(_: Any, app: FastAPI, **kwargs):
LobeLog.info("Initializing Lobe")
package = LobePackage()
locale = LobeLocale()
config = LobeConfig()
api = LobeApi(config, package)
api = LobeApi(config, package, locale)
api.create_api_route(app)

View File

@ -7,7 +7,6 @@ import { useTranslation } from 'react-i18next';
import { shallow } from 'zustand/shallow';
import { CustomLogo } from '@/components';
import { I18nOptions } from '@/i18n';
import { NeutralColor, PrimaryColor, WebuiSetting, defaultSetting, useAppStore } from '@/store';
import { colors, findKey, neutralColors, primaryColors } from './data';
@ -15,8 +14,8 @@ import { useStyles } from './style';
const SettingForm = memo(() => {
const setting = useAppStore((st) => st.setting, isEqual);
const { onSetSetting } = useAppStore(
(st) => ({ onSetSetting: st.onSetSetting, themeMode: st.themeMode }),
const { onSetSetting, localeOptions } = useAppStore(
(st) => ({ localeOptions: st.localeOptions, onSetSetting: st.onSetSetting }),
shallow,
);
const [rawSetting, setRawSetting] = useState<WebuiSetting>(setting);
@ -47,7 +46,7 @@ const SettingForm = memo(() => {
{
children: [
{
children: <Select options={I18nOptions} />,
children: <Select options={localeOptions} />,
desc: t('settingLanguageDesc'),
label: t('settingLanguage'),
name: 'i18n',

View File

@ -1,35 +1,19 @@
import i18next from 'i18next';
import HttpBackend, { HttpBackendOptions } from 'i18next-http-backend';
import { initReactI18next } from 'react-i18next';
import { SETTING_KEY, WebuiSetting } from '@/store';
import en_US from './lang/en_US';
import ja_JP from './lang/ja_JP';
import ko_KR from './lang/ko_KR';
import zh_CN from './lang/zh_CN';
import zh_HK from './lang/zh_HK';
const localSetting = JSON.parse(localStorage.getItem(SETTING_KEY) as any) as WebuiSetting;
i18next.use(initReactI18next).init({
debug: process.env.NODE_ENV === 'development',
fallbackLng: 'en_US',
lng: localSetting?.i18n || 'en_US',
resources: {
en_US: {
translation: en_US,
i18next
.use(initReactI18next)
.use(HttpBackend)
.init<HttpBackendOptions>({
backend: {
loadPath: '/lobe/locales/{{lng}}.json',
},
ja_JP: {
translation: ja_JP,
},
ko_KR: {
translation: ko_KR,
},
zh_CN: {
translation: zh_CN,
},
zh_HK: {
translation: zh_HK,
},
},
});
debug: process.env.NODE_ENV === 'development',
fallbackLng: 'en_US',
lng: localSetting?.i18n || 'en_US',
});

View File

@ -1,26 +0,0 @@
import { type SelectProps } from 'antd';
export type I18n = 'en_US' | 'zh-CN' | 'zh_HK' | 'ja_JP' | 'ko_KR';
export const I18nOptions: SelectProps['options'] = [
{
label: 'English',
value: 'en_US',
},
{
label: '简体中文',
value: 'zh_CN',
},
{
label: '繁體中文',
value: 'zh_HK',
},
{
label: '日本語',
value: 'ja_JP',
},
{
label: '한국어',
value: 'ko_KR',
},
];

View File

@ -1,92 +0,0 @@
const translation = {
community: 'Community',
custom: 'Custom',
extraNetwork: 'Extra Network',
feedback: 'Feedback',
fixed: 'Fixed',
float: 'Float',
help: 'Help',
kitchen: 'Kitchen',
loadPrompt: 'Load Prompt',
lobe: 'Lobe',
moreProducts: 'More Products',
negative: 'Negative',
positive: 'Positive',
quickSetting: 'Quick Setting',
resizable: 'Resizable',
resources: 'Resources',
scroll: 'Scroll',
setPrompt: 'Set Prompt',
setting: 'Setting',
settingButtomReset: 'Reset',
settingButtomSubmit: 'Apply and Restart Interface',
settingCustomFont: 'Load Custom Font',
settingCustomFontDesc:
'When enabled, it will automatically load a webfont to enhance the display of text in Chinese, English, and code',
settingCustomLogo: 'Custom Logo',
settingCustomLogoDesc: 'Support URL / Base64 / Emoji symbols',
settingCustomTitle: 'Custom Title',
settingCustomTitleDesc: 'Custom Logo Title',
settingExtraNetworkSidebarDefaultCardSize: 'Model Cover Size',
settingExtraNetworkSidebarDefaultCardSizeDesc: 'Default value of model cover size when starting',
settingExtraNetworkSidebarDefaultExpand: 'Default Expand',
settingExtraNetworkSidebarDefaultExpandDesc:
'Whether to expand the sidebar by default when starting',
settingExtraNetworkSidebarDefaultWidth: 'Default Width',
settingExtraNetworkSidebarDefaultWidthDesc: 'Default width of the sidebar when starting',
settingExtraNetworkSidebarDisplayMode: 'Display Mode',
settingExtraNetworkSidebarDisplayModeDesc:
'Fixed as grid mode for constant display, auto-expand when the mouse moves to the side in floating mode',
settingExtraNetworkSidebarEnable: 'Enable',
settingExtraNetworkSidebarEnableDesc: 'Enable the extra network sidebar on the right side',
settingGroupExtraNetworkSidebar: 'Extra Network Sidebar',
settingGroupLayout: 'Layout Settings',
settingGroupPromotTextarea: 'Prompt Textbox',
settingGroupQuickSettingSidebar: 'Quick Setting Sidebar',
settingGroupTheme: 'Theme Settings',
settingHideFooter: 'Hide Footer',
settingHideFooterDesc:
'Hide the theme footer and only display the default footer of stable diffusion webui',
settingLanguage: 'Language',
settingLanguageDesc: 'Lobe Theme language',
settingLogoPreview: 'Preview',
settingLogoType: 'Logo Type',
settingLogoTypeDesc: 'Logo Type',
settingNeutralColor: 'Neutral Color',
settingNeutralColorDesc:
'Customize different shades of gray with different color tendencies, the second one is the original Kitchen neutral color',
settingPrimaryColor: 'Primary Color',
settingPrimaryColorDesc:
'Custom primary color, the second one is the original Kitchen theme color',
settingPromptDisplayMode: 'Display Mode',
settingPromptDisplayModeDesc: 'Fixed height or auto height with draggable resize support',
settingPromptEditor: 'Prompt Editor',
settingPromptEditorDesc: 'Provide a simple prompt editor at the top of the quick setting sidebar',
settingPromptHighlight: 'Prompt Syntax Highlighting',
settingPromptHighlightDesc:
'Automatically colorize prompt display according to the Stable Diffusion syntax rules',
settingQuickSettingSidebarDefaultExpand: 'Default Expand',
settingQuickSettingSidebarDefaultExpandDesc:
'Whether to expand the sidebar by default when starting',
settingQuickSettingSidebarDefaultWidth: 'Default Width',
settingQuickSettingSidebarDefaultWidthDesc: 'Default width of the sidebar when starting',
settingQuickSettingSidebarDisplayMode: 'Display Mode',
settingQuickSettingSidebarDisplayModeDesc:
'Fixed as grid mode for constant display, auto-expand when the mouse moves to the side in floating mode',
settingQuickSettingSidebarEnable: 'Enable',
settingQuickSettingSidebarEnableDesc: 'Enable the quick setting sidebar on the left side',
settingReduceAnimation: 'Reduce Animation',
settingReduceAnimationDesc:
'Reduce the blur effect and background flow color, which can improve smoothness and save CPU usage',
settingSplitPreviewer: 'Split Previewer',
settingSplitPreviewerDesc:
'Put the prompt input box on the left and the generate button on the right, ensuring that the generated image is always displayed at the top when scrolling (experimental)',
settingSvgIcons: 'Use SVG Icons',
settingSvgIconsDesc: 'Replace all Emoji icons in stable diffusion webui with SVG icons globally',
switchTheme: 'Switch Light/Dark Theme',
sync: 'Sync with webui setting',
themeFeedback: 'Theme Feedback',
themeSetting: 'Theme Settings',
};
export default translation;

View File

@ -1,91 +0,0 @@
import type { Translation } from '@/types';
const translation: Translation = {
community: 'コミュニティ',
custom: 'カスタム',
extraNetwork: '追加ネットワーク',
feedback: 'フィードバック',
fixed: '固定',
float: 'フロート',
help: 'ヘルプ',
kitchen: 'キッチン',
loadPrompt: 'プロンプトをロード',
lobe: 'ローブ',
moreProducts: 'その他の製品',
negative: 'ネガティブなヒント',
positive: 'ポジティブなヒント',
quickSetting: 'クイック設定',
resizable: 'リサイズ可能',
resources: '関連リソース',
scroll: 'スクロール',
setPrompt: 'プロンプトを設定',
setting: '設定',
settingButtomReset: 'リセット',
settingButtomSubmit: '適用して再起動',
settingCustomFont: 'カスタムフォントの読み込み',
settingCustomFontDesc:
'有効にすると、Webフォントを自動的に読み込んで、英語、中国語、およびコードの表示効果を最適化します',
settingCustomLogo: 'カスタムロゴ',
settingCustomLogoDesc: 'URL / Base64 / 絵文字をサポート',
settingCustomTitle: 'カスタムタイトル',
settingCustomTitleDesc: 'カスタムロゴのタイトル名',
settingExtraNetworkSidebarDefaultCardSize: 'モデルカバーサイズ',
settingExtraNetworkSidebarDefaultCardSizeDesc: '起動時のモデルカバーサイズのデフォルト値',
settingExtraNetworkSidebarDefaultExpand: 'デフォルトで展開',
settingExtraNetworkSidebarDefaultExpandDesc: '起動時にサイドバーをデフォルトで展開しますか?',
settingExtraNetworkSidebarDefaultWidth: 'デフォルト幅',
settingExtraNetworkSidebarDefaultWidthDesc: '起動時のサイドバーのデフォルト幅',
settingExtraNetworkSidebarDisplayMode: '表示モード',
settingExtraNetworkSidebarDisplayModeDesc:
'グリッドモードで常に表示するか、ホバー時に自動的に展開するフロートモードで表示するか',
settingExtraNetworkSidebarEnable: '有効にする',
settingExtraNetworkSidebarEnableDesc: '右側の追加ネットワークサイドバーを有効にする',
settingGroupExtraNetworkSidebar: '追加ネットワークサイドバー',
settingGroupLayout: 'レイアウト設定',
settingGroupPromotTextarea: 'プロンプトテキストエリア',
settingGroupQuickSettingSidebar: 'クイック設定サイドバー',
settingGroupTheme: 'テーマ設定',
settingHideFooter: 'フッターを非表示にする',
settingHideFooterDesc:
'テーマのフッターを非表示にし、stable diffusion webui のデフォルトフッターのみ表示します',
settingLanguage: '言語',
settingLanguageDesc: 'Lobe Themeの言語',
settingLogoPreview: 'プレビュー',
settingLogoType: 'ロゴタイプ',
settingLogoTypeDesc: 'ロゴタイプ',
settingNeutralColor: '中立色',
settingNeutralColorDesc:
'異なる色相のグレースケールのカスタマイズ。2番目は元のKitchenの中立色です',
settingPrimaryColor: 'プライマリカラー',
settingPrimaryColorDesc: 'カスタムプライマリカラー。2番目は元のKitchenのプライマリカラーです',
settingPromptDisplayMode: '表示モード',
settingPromptDisplayModeDesc: '固定の高さまたはドラッグリサイズをサポートする自動の高さ',
settingPromptEditor: 'プロンプトエディタ',
settingPromptEditorDesc: 'クイック設定サイドバーの上部に簡単なプロンプトエディタを提供します',
settingPromptHighlight: 'Promptのシンタックスハイライト',
settingPromptHighlightDesc:
'Stable Diffusionのシンタックスルールに基づいて、promptの表示を自動的にハイライトします',
settingQuickSettingSidebarDefaultExpand: 'デフォルトで展開',
settingQuickSettingSidebarDefaultExpandDesc: '起動時にサイドバーをデフォルトで展開しますか?',
settingQuickSettingSidebarDefaultWidth: 'デフォルト幅',
settingQuickSettingSidebarDefaultWidthDesc: '起動時のサイドバーのデフォルト幅',
settingQuickSettingSidebarDisplayMode: '表示モード',
settingQuickSettingSidebarDisplayModeDesc:
'グリッドモードで常に表示するか、ホバー時に自動的に展開するフロートモードで表示するか',
settingQuickSettingSidebarEnable: '有効にする',
settingQuickSettingSidebarEnableDesc: '左側のクイック設定サイドバーを有効にする',
settingReduceAnimation: 'アニメーションを削減',
settingReduceAnimationDesc:
'ガラスのエフェクトと背景の流れる色を削減し、スムーズさを向上させ、CPUの使用量を節約できます',
settingSplitPreviewer: '2列モード',
settingSplitPreviewerDesc:
'プロンプト入力ボックスを左側に配置し、生成ボタンを右側に配置し、スクロール時に生成された画像が常にトップに表示されるようにします(実験的)',
settingSvgIcons: 'SVGアイコンを使用',
settingSvgIconsDesc: 'stable diffusion webuiの絵文字アイコンをすべてSVGアイコンに置き換えます',
switchTheme: '明暗テーマを切り替える',
sync: 'WebUIの設定と同期する',
themeFeedback: 'テーマのフィードバック',
themeSetting: 'テーマ設定',
};
export default translation;

View File

@ -1,91 +0,0 @@
import type { Translation } from '@/types';
const translation: Translation = {
community: '커뮤니티',
custom: '사용자 정의',
extraNetwork: '추가 네트워크',
feedback: '피드백',
fixed: '고정',
float: '부유',
help: '도움말',
kitchen: 'Kitchen',
loadPrompt: '로드 프롬프트',
lobe: 'Lobe',
moreProducts: '더 많은 제품',
negative: '부정적인',
positive: '긍정적인',
quickSetting: '빠른 설정',
resizable: '크기 조절 가능',
resources: '관련 자료',
scroll: '스크롤',
setPrompt: '프롬프트 설정',
setting: '설정',
settingButtomReset: '재설정',
settingButtomSubmit: '적용 및 인터페이스 재시작',
settingCustomFont: '폰트 로드',
settingCustomFontDesc:
'이 기능을 사용하면 웹 폰트를 자동으로 로드하여 영문, 한글 및 코드 표시 효과를 최적화합니다',
settingCustomLogo: '사용자 정의 로고',
settingCustomLogoDesc: 'URL / Base64 / 이모지 표정을 지원합니다.',
settingCustomTitle: '사용자 정의 제목',
settingCustomTitleDesc: '사용자 정의 로고 제목',
settingExtraNetworkSidebarDefaultCardSize: '모델 커버 크기',
settingExtraNetworkSidebarDefaultCardSizeDesc: '시작시 모델 커버 크기 기본값',
settingExtraNetworkSidebarDefaultExpand: '기본 확장',
settingExtraNetworkSidebarDefaultExpandDesc: '시작시 사이드바 기본 확장 여부',
settingExtraNetworkSidebarDefaultWidth: '기본 너비',
settingExtraNetworkSidebarDefaultWidthDesc: '시작시 사이드바 기본 너비',
settingExtraNetworkSidebarDisplayMode: '표시 모드',
settingExtraNetworkSidebarDisplayModeDesc:
'그리드 모드로 고정하여 항상 표시하거나, 부유 모드로 설정하여 사이드바에 마우스를 가져가면 자동으로 확장',
settingExtraNetworkSidebarEnable: '사용',
settingExtraNetworkSidebarEnableDesc: '오른쪽에 추가 네트워크 사이드바 활성화',
settingGroupExtraNetworkSidebar: '추가 네트워크 사이드바',
settingGroupLayout: '레이아웃 설정',
settingGroupPromotTextarea: '프롬프트 텍스트 영역',
settingGroupQuickSettingSidebar: '빠른 설정 사이드바',
settingGroupTheme: '테마 설정',
settingHideFooter: '푸터 숨기기',
settingHideFooterDesc: '테마 푸터를 숨기고 stable diffusion webui의 기본 푸터만 표시',
settingLanguage: '언어',
settingLanguageDesc: 'Lobe Theme 테마 언어',
settingLogoPreview: '미리보기',
settingLogoType: '로고 유형',
settingLogoTypeDesc: '로고 유형',
settingNeutralColor: '중립색',
settingNeutralColorDesc:
'다른 색상 경향의 그레이 스케일 사용자 정의, 두 번째는 원래 Kitchen의 중립색',
settingPrimaryColor: '기본 색상',
settingPrimaryColorDesc: '사용자 정의 기본 색상, 두 번째는 원래 Kitchen의 기본 색상',
settingPromptDisplayMode: '표시 모드',
settingPromptDisplayModeDesc: '고정 높이 또는 자동 높이 및 드래그 조절 지원',
settingPromptEditor: '프롬프트 편집기',
settingPromptEditorDesc: '빠른 설정 사이드바 상단에 간단한 프롬프트 편집기 제공',
settingPromptHighlight: 'Prompt 구문 강조',
settingPromptHighlightDesc:
'Stable Diffusion 구문 규칙에 따라 자동으로 prompt를 강조하여 표시합니다',
settingQuickSettingSidebarDefaultExpand: '기본 확장',
settingQuickSettingSidebarDefaultExpandDesc: '시작시 사이드바 기본 확장 여부',
settingQuickSettingSidebarDefaultWidth: '기본 너비',
settingQuickSettingSidebarDefaultWidthDesc: '시작시 사이드바 기본 너비',
settingQuickSettingSidebarDisplayMode: '표시 모드',
settingQuickSettingSidebarDisplayModeDesc:
'그리드 모드로 고정하여 항상 표시하거나, 부유 모드로 설정하여 사이드바에 마우스를 가져가면 자동으로 확장',
settingQuickSettingSidebarEnable: '사용',
settingQuickSettingSidebarEnableDesc: '왼쪽에 빠른 설정 사이드바 활성화',
settingReduceAnimation: '애니메이션 줄이기',
settingReduceAnimationDesc:
'유리 효과와 배경 흐름 색상을 줄여서 부드러움을 향상시키고 CPU 사용량을 줄일 수 있습니다.',
settingSplitPreviewer: '이중 열 모드',
settingSplitPreviewerDesc:
'프롬프트 입력 상자를 왼쪽에 배치하고, 우측에 생성 버튼을 두어 스크롤 시 생성된 이미지가 항상 위에 표시되도록 합니다 (실험적)',
settingSvgIcons: 'SVG 아이콘 사용',
settingSvgIconsDesc:
'stable diffusion webui의 이모지 아이콘을 전역적으로 SVG 아이콘으로 교체합니다.',
switchTheme: '밝기 테마 전환',
sync: '웹 UI 설정과 동기화',
themeFeedback: '테마 피드백',
themeSetting: '테마 설정',
};
export default translation;

View File

@ -1,86 +0,0 @@
import type { Translation } from '@/types';
const translation: Translation = {
community: '社区',
custom: '自定义',
extraNetwork: '附加网络',
feedback: '反馈',
fixed: '固定',
float: '悬浮',
help: '帮助',
kitchen: 'Kitchen',
loadPrompt: '加载提示',
lobe: 'Lobe',
moreProducts: '更多产品',
negative: '反向提示词',
positive: '正面提示词',
quickSetting: '快捷设置',
resizable: '缩放',
resources: '相关资源',
scroll: '滚动',
setPrompt: '发送提示词',
setting: '设置',
settingButtomReset: '重置',
settingButtomSubmit: '应用并重启界面',
settingCustomFont: '加载字体美化',
settingCustomFontDesc: '开启后会自动加载 Webfont 美化字体,优化中英文和代码显示效果',
settingCustomLogo: '自定义 Logo',
settingCustomLogoDesc: '支持 URL / Base64 / Emoji 表情符号',
settingCustomTitle: '自定义标题',
settingCustomTitleDesc: '自定义 Logo 标题名称',
settingExtraNetworkSidebarDefaultCardSize: '模型封面尺寸',
settingExtraNetworkSidebarDefaultCardSizeDesc: '启动时模型封面尺寸默认值',
settingExtraNetworkSidebarDefaultExpand: '默认展开',
settingExtraNetworkSidebarDefaultExpandDesc: '是否在启动时将侧边栏默认展开',
settingExtraNetworkSidebarDefaultWidth: '默认宽度',
settingExtraNetworkSidebarDefaultWidthDesc: '侧边栏在启动时的默认宽度',
settingExtraNetworkSidebarDisplayMode: '显示模式',
settingExtraNetworkSidebarDisplayModeDesc:
'固定为栅格模式常驻显示,悬浮模式时当鼠标移到侧边时自动展开',
settingExtraNetworkSidebarEnable: '启用',
settingExtraNetworkSidebarEnableDesc: '启用位于右侧的附加网络侧边栏',
settingGroupExtraNetworkSidebar: '附加网络侧边栏',
settingGroupLayout: '布局设置',
settingGroupPromotTextarea: '提示词文本框',
settingGroupQuickSettingSidebar: '快捷设置侧边栏',
settingGroupTheme: '主题设置',
settingHideFooter: '隐藏页脚',
settingHideFooterDesc: '隐藏主题页脚,只显示 stable diffusion webui 默认页脚',
settingLanguage: '语言',
settingLanguageDesc: 'Lobe Theme 主题语言',
settingLogoPreview: '预览',
settingLogoType: 'Logo 类型',
settingLogoTypeDesc: 'Logo 类型',
settingNeutralColor: '中性色',
settingNeutralColorDesc: '不同色彩倾向的灰阶自定义,第二个为原始 Kitchen 中性色',
settingPrimaryColor: '主题色',
settingPrimaryColorDesc: '自定义主题色,第二个为原始 Kitchen 主题色',
settingPromptDisplayMode: '显示模式',
settingPromptDisplayModeDesc: '固定高度或自动高度并支持拖拽拉伸',
settingPromptEditor: '提示词编辑器',
settingPromptEditorDesc: '提供简易的提示词编辑器位于快捷设置侧边栏顶部',
settingPromptHighlight: 'Prompt 语法高亮',
settingPromptHighlightDesc: '按 Stable Diffusion 语法规则,自动染色 prompt 显示',
settingQuickSettingSidebarDefaultExpand: '默认展开',
settingQuickSettingSidebarDefaultExpandDesc: '是否在启动时将侧边栏默认展开',
settingQuickSettingSidebarDefaultWidth: '默认宽度',
settingQuickSettingSidebarDefaultWidthDesc: '侧边栏在启动时的默认宽度',
settingQuickSettingSidebarDisplayMode: '显示模式',
settingQuickSettingSidebarDisplayModeDesc:
'固定为栅格模式常驻显示,悬浮模式时当鼠标移到侧边时自动展开',
settingQuickSettingSidebarEnable: '启用',
settingQuickSettingSidebarEnableDesc: '启用位于左侧的快捷设置侧边栏',
settingReduceAnimation: '减少动画效果',
settingReduceAnimationDesc: '减少毛玻璃效果和背景流动色,可以提升流畅度并节省 CPU 使用',
settingSplitPreviewer: '双列模式',
settingSplitPreviewerDesc:
'将提示词输入框放在左侧,生成按钮于右侧,确保在滚动时生成的图像始终显示在顶部 (实验性)',
settingSvgIcons: '使用 SVG 图标',
settingSvgIconsDesc: '将 stable diffusion webui 中的 Emoji 图标全局替换为 SVG 图标',
switchTheme: '切换亮暗色主题',
sync: '与 WebUI 设置同步',
themeFeedback: '主题反馈',
themeSetting: '主题设置',
};
export default translation;

View File

@ -1,86 +0,0 @@
import type { Translation } from '@/types';
const translation: Translation = {
community: '社區',
custom: '自訂',
extraNetwork: '附加網絡',
feedback: '反饋',
fixed: '固定',
float: '懸浮',
help: '幫助',
kitchen: 'Kitchen',
loadPrompt: '加載提示',
lobe: 'Lobe',
moreProducts: '更多產品',
negative: '反向提示詞',
positive: '正面提示詞',
quickSetting: '快捷設置',
resizable: '縮放',
resources: '相關資源',
scroll: '滾動',
setPrompt: '發送提示詞',
setting: '設置',
settingButtomReset: '重置',
settingButtomSubmit: '應用並重啟界面',
settingCustomFont: '載入字型美化',
settingCustomFontDesc: '開啟後會自動載入 Webfont 美化字型,優化中英文和程式碼顯示效果',
settingCustomLogo: '自定義 Logo',
settingCustomLogoDesc: '支持 URL / Base64 / Emoji 表情符號',
settingCustomTitle: '自定義標題',
settingCustomTitleDesc: '自定義 Logo 標題名稱',
settingExtraNetworkSidebarDefaultCardSize: '模型封面尺寸',
settingExtraNetworkSidebarDefaultCardSizeDesc: '啟動時模型封面尺寸默認值',
settingExtraNetworkSidebarDefaultExpand: '默認展開',
settingExtraNetworkSidebarDefaultExpandDesc: '是否在啟動時將側邊欄默認展開',
settingExtraNetworkSidebarDefaultWidth: '默認寬度',
settingExtraNetworkSidebarDefaultWidthDesc: '側邊欄在啟動時的默認寬度',
settingExtraNetworkSidebarDisplayMode: '顯示模式',
settingExtraNetworkSidebarDisplayModeDesc:
'固定為格模式常駐顯示,懸浮模式時當鼠標移到側邊時自動展開',
settingExtraNetworkSidebarEnable: '啟用',
settingExtraNetworkSidebarEnableDesc: '啟用位於右側的附加網絡側邊欄',
settingGroupExtraNetworkSidebar: '附加網絡側邊欄',
settingGroupLayout: '佈局設置',
settingGroupPromotTextarea: '提示詞文本框',
settingGroupQuickSettingSidebar: '快捷設置側邊欄',
settingGroupTheme: '主題設置',
settingHideFooter: '隱藏頁腳',
settingHideFooterDesc: '隱藏主題頁腳,只顯示 stable diffusion webui 默認頁腳',
settingLanguage: '語言',
settingLanguageDesc: 'Lobe Theme 主題語言',
settingLogoPreview: '預覽',
settingLogoType: 'Logo 類型',
settingLogoTypeDesc: 'Logo 類型',
settingNeutralColor: '中性色',
settingNeutralColorDesc: '不同色彩傾向的灰階自定義,第二個為原始 Kitchen 中性色',
settingPrimaryColor: '主題色',
settingPrimaryColorDesc: '自定義主題色,第二個為原始 Kitchen 主題色',
settingPromptDisplayMode: '顯示模式',
settingPromptDisplayModeDesc: '固定高度或自動高度並支持拖拽拉伸',
settingPromptEditor: '提示詞編輯器',
settingPromptEditorDesc: '提供簡易的提示詞編輯器位於快捷設置側邊欄頂部',
settingPromptHighlight: 'Prompt 語法高亮',
settingPromptHighlightDesc: '按照 Stable Diffusion 語法規則,自動著色 prompt 顯示',
settingQuickSettingSidebarDefaultExpand: '默認展開',
settingQuickSettingSidebarDefaultExpandDesc: '是否在啟動時將側邊欄默認展開',
settingQuickSettingSidebarDefaultWidth: '默認寬度',
settingQuickSettingSidebarDefaultWidthDesc: '側邊欄在啟動時的默認寬度',
settingQuickSettingSidebarDisplayMode: '顯示模式',
settingQuickSettingSidebarDisplayModeDesc:
'固定為格模式常駐顯示,懸浮模式時當鼠標移到側邊時自動展開',
settingQuickSettingSidebarEnable: '啟用',
settingQuickSettingSidebarEnableDesc: '啟用位於左側的快捷設置側邊欄',
settingReduceAnimation: '減少動畫效果',
settingReduceAnimationDesc: '減少毛玻璃效果和背景流動色,可以提升流暢度並節省 CPU 使用',
settingSplitPreviewer: '雙列模式',
settingSplitPreviewerDesc:
'將提示詞輸入框放在左側,生成按鈕於右側,確保在滾動時生成的圖像始終顯示在頂部 (實驗性)',
settingSvgIcons: '使用 SVG 圖標',
settingSvgIconsDesc: '將 stable diffusion webui 中的 Emoji 圖標全局替換為 SVG 圖標',
switchTheme: '切換亮暗色主題',
sync: '與 WebUI 設置同步',
themeFeedback: '主題反饋',
themeSetting: '主題設置',
};
export default translation;

View File

@ -1,7 +1,7 @@
import { ActionIcon } from '@lobehub/ui';
import { Space } from 'antd';
import { useResponsive } from 'antd-style';
import { Github, LucideIcon, Moon, Settings, Sun } from 'lucide-react';
import { Github, Moon, Settings, Sun, createLucideIcon } from 'lucide-react';
import qs from 'query-string';
import { memo, useCallback, useState } from 'react';
import { useTranslation } from 'react-i18next';
@ -10,11 +10,15 @@ import { shallow } from 'zustand/shallow';
import { Giscus, Setting } from '@/components';
import { useAppStore } from '@/store';
const CivitaiLogo: LucideIcon = ({ size }) => (
<svg fill="currentColor" height={size} viewBox="0 0 16 16" width={size}>
<path d="M2 4.5L8 1l6 3.5v7L8 15l-6-3.5v-7zm6-1.194L3.976 5.653v4.694L8 12.694l4.024-2.347V5.653L8 3.306zm0 1.589l2.662 1.552v.824H9.25L8 6.54l-1.25.73v1.458L8 9.46l1.25-.73h1.412v.824L8 11.105 5.338 9.553V6.447L8 4.895z" />
</svg>
);
const CivitaiLogo = createLucideIcon('CivitaiLogo', [
[
'path',
{
d: 'M2 4.5L8 1l6 3.5v7L8 15l-6-3.5v-7zm6-1.194L3.976 5.653v4.694L8 12.694l4.024-2.347V5.653L8 3.306zm0 1.589l2.662 1.552v.824H9.25L8 6.54l-1.25.73v1.458L8 9.46l1.25-.73h1.412v.824L8 11.105 5.338 9.553V6.447L8 4.895z',
key: '18tl5t',
},
],
]);
interface ActionsProps {
themeMode: 'dark' | 'light';

View File

@ -1,4 +1,6 @@
import { I18n } from '@/i18n';
import { SelectProps } from 'antd';
import { I18n } from '@/types';
export const SETTING_KEY = 'SD-LOBE-SETTING';
export const FALLBACK_SETTING_KEY = 'SD-KITCHEN-SETTING';
@ -50,8 +52,10 @@ export interface AppState {
currentTab: string;
latestVersion: string;
loading: boolean;
localeOptions: SelectProps['options'];
onInit: () => void;
onLoadLatestVersion: () => void;
onLoadLocalOptions: () => void;
onLoadSetting: () => void;
onLoadVersion: () => void;
onSetSetting: (setting: WebuiSetting) => void;

View File

@ -1,8 +1,12 @@
import { SelectProps } from 'antd';
import semver from 'semver';
import defualtLocaleOptions from '@/../locales/options.json';
import { homepage, version } from '@/../package.json';
import { WebuiSetting } from '@/store/AppState';
export const DEFAULT_VERSION: string = version;
export const DEFAULT_LOCALE_OPTIONS: SelectProps['options'] = defualtLocaleOptions;
export const getSetting = async(): Promise<WebuiSetting | undefined> => {
const res = await fetch('/lobe/config');
const data = (await res.json()) as WebuiSetting;
@ -23,15 +27,22 @@ export const postSetting = async(setting: WebuiSetting) => {
export const getVersion = async(): Promise<string> => {
const res = await fetch('/lobe/package');
const data = (await res.json()) as any;
if (!data || data.empty || !data.version) return version;
if (!data || data.empty || !data.version) return DEFAULT_VERSION;
return data.version;
};
export const getLocaleOptions = async(): Promise<SelectProps['options']> => {
const res = await fetch('/lobe/locales/options');
const data = (await res.json()) as SelectProps['options'];
if (!data || data?.length === 0) return DEFAULT_LOCALE_OPTIONS;
return data;
};
export const getLatestVersion = async(): Promise<string> => {
const res = await fetch(
`https://api.github.com/repos/${homepage.replace('https://github.com/', '')}/releases/latest`,
);
const data = (await res.json()) as any;
if (!data || !data.tag_name) return version;
return semver.clean(data.tag_name as string) || version;
if (!data || !data.tag_name) return DEFAULT_VERSION;
return semver.clean(data.tag_name as string) || DEFAULT_VERSION;
};

View File

@ -1,10 +1,16 @@
import { create } from 'zustand';
import { devtools } from 'zustand/middleware';
import { version } from '@/../package.json';
import { AppState, FALLBACK_SETTING_KEY, SETTING_KEY, WebuiSetting } from './AppState';
import { getLatestVersion, getSetting, getVersion, postSetting } from './api';
import {
DEFAULT_LOCALE_OPTIONS,
DEFAULT_VERSION,
getLatestVersion,
getLocaleOptions,
getSetting,
getVersion,
postSetting,
} from './api';
export * from './AppState';
@ -37,11 +43,13 @@ export const defaultSetting: WebuiSetting = {
export const useAppStore = create<AppState>()(
devtools((set, get) => ({
currentTab: 'tab_txt2img',
latestVersion: version,
latestVersion: DEFAULT_VERSION,
loading: true,
localeOptions: DEFAULT_LOCALE_OPTIONS,
onInit: async() => {
set(() => ({ loading: true }), false, 'onInit');
const { onLoadSetting, onLoadVersion, onLoadLatestVersion } = get();
const { onLoadSetting, onLoadVersion, onLoadLatestVersion, onLoadLocalOptions } = get();
await onLoadLocalOptions();
await onLoadVersion();
await onLoadLatestVersion();
await onLoadSetting();
@ -51,6 +59,10 @@ export const useAppStore = create<AppState>()(
const latestVersion = await getLatestVersion();
set(() => ({ latestVersion }), false, 'onLoadLatestVersion');
},
onLoadLocalOptions: async() => {
const localeOptions = await getLocaleOptions();
set(() => ({ localeOptions }), false, 'onLoadLocalOptions');
},
onLoadSetting: async() => {
console.time('🤯 [setting] loaded');
let themeSetting;
@ -110,6 +122,6 @@ export const useAppStore = create<AppState>()(
},
setting: defaultSetting,
themeMode: 'dark',
version: version,
version: DEFAULT_VERSION,
})),
);

View File

@ -1,6 +1,9 @@
import { type HTMLAttributes } from 'react';
import translation from '@/i18n/lang/en_US';
import translation from '@/../locales/en_US.json';
import i18nOptions from '@/../locales/options.json';
export type I18n = (typeof i18nOptions)[number]['value'];
export const resources = {
translation,