feat: bricks i18n — 硬编码字符串改用 i18n._() + 翻译文件

编译的 dist/ 目录新增 i18n/{zh,en,jp,ko}/ 自动注入到 sage wwwroot/bricks/i18n/

翻译的字符串:
- conform.js: Conform/Discard → i18n._()
- dynamicaccordion.js: add a new record → i18n._()
- form.js: Submit/Reset/Cancel/Requirement → i18n._()
- jsoncall.js: access error → i18n._()
- llm.js: 知识库/召回数量/模版 → i18n._()

build.sh 新增 i18n 目录复制到 dist
This commit is contained in:
yumoqing 2026-06-29 12:03:34 +08:00
parent aa81a38241
commit dc74074bdd
10 changed files with 67 additions and 14 deletions

View File

@ -42,4 +42,9 @@ cp -a ../examples/* ../dist/examples
cp -a ../3parties/* ../dist/3parties cp -a ../3parties/* ../dist/3parties
cp -a ../docs/* ../dist/docs cp -a ../docs/* ../dist/docs
cp *.tmpl ../dist cp *.tmpl ../dist
if [ ! -d ../dist/i18n ];then
rm -rf ../dist/i18n
mkdir ../dist/i18n
fi
cp -a ../i18n/* ../dist/i18n
echo "Finished ..." echo "Finished ..."

View File

@ -29,12 +29,12 @@ bricks.Conform = class extends bricks.PopupWindow {
bricks.extend({ bricks.extend({
"name":"conform", "name":"conform",
"icon":bricks_resource('imgs/conform.svg'), "icon":bricks_resource('imgs/conform.svg'),
"label":'Conform' "label":bricks.app.i18n._('Conform')
}, this.opts.conform||{}), }, this.opts.conform||{}),
bricks.extend({ bricks.extend({
"name":"discard", "name":"discard",
"icon":bricks_resource('imgs/cancel.svg'), "icon":bricks_resource('imgs/cancel.svg'),
"label":"Discard" "label":bricks.app.i18n._("Discard")
}, this.opts.discard||{}) }, this.opts.discard||{})
] ]
} }

View File

@ -275,7 +275,7 @@ bricks.DynamicAccordion = class extends bricks.VScrollPanel {
"tools":[ "tools":[
{ {
"name":"add", "name":"add",
"tip":"add a new record", "tip":bricks.app.i18n._("add a new record"),
"icon":this.editable.add_icon || bricks_resource('imgs/add.svg') "icon":this.editable.add_icon || bricks_resource('imgs/add.svg')
} }
] ]

View File

@ -251,19 +251,19 @@ bricks.FormBase = class extends bricks.Layout {
icon:bricks_resource('imgs/submit.svg'), icon:bricks_resource('imgs/submit.svg'),
name:'submit', name:'submit',
css:'submit_btn', css:'submit_btn',
label:'Submit' label:bricks.app.i18n._('Submit')
}, },
{ {
icon:bricks_resource('imgs/reset.svg'), icon:bricks_resource('imgs/reset.svg'),
name:'reset', name:'reset',
css:'reset_btn', css:'reset_btn',
label:'Reset' label:bricks.app.i18n._('Reset')
}, },
{ {
icon:bricks_resource('imgs/cancel.svg'), icon:bricks_resource('imgs/cancel.svg'),
name:'cancel', name:'cancel',
css:'clear_btn', css:'clear_btn',
label:'Cancel' label:bricks.app.i18n._('Cancel')
} }
] ]
var tb_desc={}; var tb_desc={};
@ -338,7 +338,7 @@ bricks.FormBase = class extends bricks.Layout {
var d = w.getValue(); var d = w.getValue();
if (w.required && ( d[name] == '' || d[name] === null)){ if (w.required && ( d[name] == '' || d[name] === null)){
bricks.debug('data=', data, 'd=', d); bricks.debug('data=', data, 'd=', d);
new bricks.Error({title:'Requirement', message:'required field must input"' + w.label + '"'}) new bricks.Error({title:bricks.app.i18n._('Requirement'), message:bricks.app.i18n._('required field must input') + '"' + w.label + '"'})
w.focus(); w.focus();
return; return;
} }
@ -392,7 +392,7 @@ bricks.FormBase = class extends bricks.Layout {
if (w.parent.is_disabled()) continue; if (w.parent.is_disabled()) continue;
var d = w.getValue(); var d = w.getValue();
if (w.required && ( d[name] == '' || d[name] === null)){ if (w.required && ( d[name] == '' || d[name] === null)){
new bricks.Error({title:'Requirement', message:'required field must input"' + w.label + '"'}) new bricks.Error({title:bricks.app.i18n._('Requirement'), message:bricks.app.i18n._('required field must input') + '"' + w.label + '"'})
w.focus(); w.focus();
return; return;
} }
@ -544,7 +544,7 @@ bricks.InlineForm = class extends bricks.HBox {
build_submit(){ build_submit(){
this.add_widget(new bricks.Filler()); this.add_widget(new bricks.Filler());
var btnopts = { var btnopts = {
label: this.opts.submit_label || 'Submit', label: this.opts.submit_label || bricks.app.i18n._('Submit'),
css: this.opts.submit_css || 'primary' css: this.opts.submit_css || 'primary'
}; };
if (this.opts.submit_icon) btnopts.icon = this.opts.submit_icon; if (this.opts.submit_icon) btnopts.icon = this.opts.submit_icon;

View File

@ -137,7 +137,7 @@ bricks.HttpText = class {
} }
if (fetchResult.status == 403){ if (fetchResult.status == 403){
var w = new bricks.Error({ var w = new bricks.Error({
"title":"access error", "title":bricks.app.i18n._("access error"),
"auto_open":true, "auto_open":true,
"message":"you are forbidden to access it", "message":"you are forbidden to access it",
"archor":"cc", "archor":"cc",
@ -149,7 +149,7 @@ bricks.HttpText = class {
} }
if (! fetchResult.ok){ if (! fetchResult.ok){
var w = new bricks.Error({ var w = new bricks.Error({
"title":"access error", "title":bricks.app.i18n._("access error"),
"auto_open":true, "auto_open":true,
"message":"server return error with error code" + fetchResult.status, "message":"server return error with error code" + fetchResult.status,
"archor":"cc", "archor":"cc",

View File

@ -531,7 +531,7 @@ bricks.LlmIO = class extends bricks.VBox {
"uitype":"checkbox", "uitype":"checkbox",
"multicheck": true, "multicheck": true,
"required": true, "required": true,
"label":"知识库", "label":bricks.app.i18n._("知识库"),
"valueField":"id", "valueField":"id",
"textField":"name", "textField":"name",
"dataurl":this.get_kdb_url "dataurl":this.get_kdb_url
@ -540,14 +540,14 @@ bricks.LlmIO = class extends bricks.VBox {
"name":"recall_cnt", "name":"recall_cnt",
"uitype":"int", "uitype":"int",
"value": data.recall_cnt, "value": data.recall_cnt,
"label":"召回数量" "label":bricks.app.i18n._("召回数量")
}, },
{ {
"name":"prompt_tmpl", "name":"prompt_tmpl",
"value":data.prompt_tmpl, "value":data.prompt_tmpl,
"uitype":"text", "uitype":"text",
"required": true, "required": true,
"label":"模版" "label":bricks.app.i18n._("模版")
} }
] ]
} }

12
i18n/en/msg.txt Normal file
View File

@ -0,0 +1,12 @@
Conform: Confirm
Discard: Discard
add a new record: Add a new record
Submit: Submit
Reset: Reset
Cancel: Cancel
Requirement: Requirement
required field must input: Required field must input
access error: Access error
知识库: Knowledge Base
召回数量: Recall Count
模版: Template

12
i18n/jp/msg.txt Normal file
View File

@ -0,0 +1,12 @@
Conform: 確認
Discard: 破棄
add a new record: 新規レコード追加
Submit: 提出
Reset: リセット
Cancel: キャンセル
Requirement: 必須
required field must input: 必須フィールドを入力してください
access error: アクセスエラー
知识库: 知識ベース
召回数量: 検索数
模版: テンプレート

12
i18n/ko/msg.txt Normal file
View File

@ -0,0 +1,12 @@
Conform: 확인
Discard: 취소
add a new record: 새 레코드 추가
Submit: 제출
Reset: 재설정
Cancel: 취소
Requirement: 필수
required field must input: 필수 필드를 입력하세요
access error: 액세스 오류
知识库: 지식 베이스
召回数量: 검색 수
模版: 템플릿

12
i18n/zh/msg.txt Normal file
View File

@ -0,0 +1,12 @@
Conform: 确认
Discard: 放弃
add a new record: 添加新记录
Submit: 提交
Reset: 重置
Cancel: 取消
Requirement: 必填
required field must input: 必填字段必须输入
access error: 访问错误
知识库: 知识库
召回数量: 召回数量
模版: 模版