Skip to content

Commit

Permalink
add i18n to app (#8)
Browse files Browse the repository at this point in the history
  • Loading branch information
shalldie committed Jan 23, 2024
1 parent f766af0 commit c00f905
Show file tree
Hide file tree
Showing 17 changed files with 234 additions and 40 deletions.
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,5 @@ require (
golang.org/x/sys v0.16.0 // indirect
golang.org/x/term v0.16.0 // indirect
golang.org/x/text v0.14.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -106,3 +106,5 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
7 changes: 4 additions & 3 deletions internal/app/file_list/del_file.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,25 @@ import (

"github.com/shalldie/tnote/internal/app/pkgs/dialog"
"github.com/shalldie/tnote/internal/app/store"
"github.com/shalldie/tnote/internal/i18n"
)

func (m *FileListModel) delFile(filename string) {
store.Send(dialog.DialogPayload{
Mode: dialog.ModeConfirm,
Message: fmt.Sprintf("确定要删除文件「%v」吗?", filename),
Message: fmt.Sprintf(i18n.Get(i18nTpl, "del_confirm"), filename),
FnOK: func(args ...string) bool {
go func() {
go store.Send(store.StatusPayload{
Loading: true,
Message: "删除中...",
Message: i18n.Get(i18nTpl, "del_deleting"),
})

store.Gist.UpdateFile(filename, nil)

store.Send(store.StatusPayload{
Loading: false,
Message: fmt.Sprintf("「%v」完成删除", filename),
Message: fmt.Sprintf(i18n.Get(i18nTpl, "del_done"), filename),
Duration: 5,
})
store.Send(store.CMD_REFRESH_FILES(""))
Expand Down
5 changes: 3 additions & 2 deletions internal/app/file_list/file_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
"github.com/shalldie/tnote/internal/app/pkgs/model"
"github.com/shalldie/tnote/internal/app/store"
"github.com/shalldie/tnote/internal/gist"
"github.com/shalldie/tnote/internal/i18n"
"github.com/shalldie/tnote/internal/utils"
)

Expand Down Expand Up @@ -177,7 +178,7 @@ func (m FileListModel) headerView() string {
borderStyle := listBorderStyle.GetBorderStyle()

titleStyle := lipgloss.NewStyle().Foreground(astyles.PRIMARY_ACTIVE_COLOR).Padding(0, 1).Bold(m.Active)
title := titleStyle.Render("文件列表")
title := titleStyle.Render(i18n.Get(i18nTpl, "filelist_title"))
// title := titleStyle.Render("Mr. Pager")
// ━┓
line := lipgloss.NewStyle().Foreground(m.curForeground()).Render(strings.Repeat(borderStyle.Top, utils.MathMax(0, m.Width-lipgloss.Width(title)+1)) + borderStyle.TopRight)
Expand Down Expand Up @@ -255,7 +256,7 @@ func New() FileListModel {
list.DisableQuitKeybindings()
list.KeyMap = newListKeyMap()
list.AdditionalFullHelpKeys = additionalKeyMap
list.FilterInput.Prompt = "过滤:"
list.FilterInput.Prompt = i18n.Get(i18nTpl, "filelist_filter")

// model
model := FileListModel{
Expand Down
69 changes: 69 additions & 0 deletions internal/app/file_list/i18n.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package file_list

var i18nTpl = `
en_US:
# del file
del_confirm: Are you sure you want to delete the file 「%v」?
del_deleting: deleting...
del_done: 「%v」Complete deletion
# new file
new_namevalid: The file name length needs to be greater than 3
new_message: New file, please enter the file name
new_creating: creating...
new_done: 「%v」Complete new creation
# rename file
rename_message: Rename file「%v」
rename_renaming: renaming...
rename_done: 「%v」->「%v」Complete renaming
# file list
filelist_title: File List
filelist_filter: "Filter:"
# keys
key_up: up
key_down: down
key_pgup: prev page
key_pgdown: next page
key_filter: filter
key_cancel: cancel
key_filter_apply: apply filter
key_filter_more: more
key_filter_less: less
# key custom
key_new: new file
key_rename: rename
key_edit: edit
key_del: delete
zh_CN:
# del file
del_confirm: 确定要删除文件「%v」吗?
del_deleting: 删除中...
del_done: 「%v」完成删除
# new file
new_namevalid: 文件名长度需要大于3
new_message: 新建文件,请输入文件名
new_creating: 新建中...
new_done: 「%v」完成新建
# rename file
rename_message: 重命名文件「%v」
rename_renaming: 重命名中...
rename_done: 「%v」->「%v」完成重命名
# file list
filelist_title: 文件列表
filelist_filter: 过滤:
# keys
key_up: 上
key_down: 下
key_pgup: 上一页
key_pgdown: 下一页
key_filter: 过滤
key_cancel: 取消
key_filter_apply: 应用过滤
key_filter_more: 更多
key_filter_less: 折叠
# key custom
key_new: 新建
key_rename: 重命名
key_edit: 编辑
key_del: 删除
`
50 changes: 32 additions & 18 deletions internal/app/file_list/keys.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,30 +3,35 @@ package file_list
import (
"github.com/charmbracelet/bubbles/key"
"github.com/charmbracelet/bubbles/list"
"github.com/shalldie/tnote/internal/i18n"
)

func newListKeyMap() list.KeyMap {
return list.KeyMap{
// Browsing.
CursorUp: key.NewBinding(
key.WithKeys("up", "k"),
key.WithHelp("↑/k", "上"),
// key.WithHelp("↑/k", "上"),
key.WithHelp("↑/k", i18n.Get(i18nTpl, "key_up")),
),
CursorDown: key.NewBinding(
key.WithKeys("down", "j"),
key.WithHelp("↓/j", "下"),
// key.WithHelp("↓/j", "下"),
key.WithHelp("↓/j", i18n.Get(i18nTpl, "key_down")),
),
PrevPage: key.NewBinding(
// key.WithKeys("left", "h", "pgup", "b", "u"),
key.WithKeys("h", "pgup"),
// key.WithHelp("←/h/pgup", "prev page"),
key.WithHelp("h/pgup", "上一页"),
// key.WithHelp("h/pgup", "上一页"),
key.WithHelp("h/pgup", i18n.Get(i18nTpl, "key_pgup")),
),
NextPage: key.NewBinding(
// key.WithKeys("right", "l", "pgdown", "f", "d"),
key.WithKeys("l", "pgdown"),
// key.WithHelp("→/l/pgdn", "next page"),
key.WithHelp("l/pgdn", "下一页"),
// key.WithHelp("l/pgdn", "下一页"),
key.WithHelp("l/pgdn", i18n.Get(i18nTpl, "key_pgdown")),
),
// GoToStart: key.NewBinding(
// key.WithKeys("home", "g"),
Expand All @@ -38,34 +43,39 @@ func newListKeyMap() list.KeyMap {
// ),
Filter: key.NewBinding(
key.WithKeys("/"),
key.WithHelp("/", "过滤"),
),
ClearFilter: key.NewBinding(
key.WithKeys("esc"),
// key.WithHelp("esc", "clear filter"),
key.WithHelp("esc", "清空过滤条件"),
// key.WithHelp("/", "过滤"),
key.WithHelp("/", i18n.Get(i18nTpl, "key_filter")),
),
// ClearFilter: key.NewBinding(
// key.WithKeys("esc"),
// // key.WithHelp("esc", "clear filter"),
// key.WithHelp("esc", "清空过滤条件"),
// ),

// Filtering.
CancelWhileFiltering: key.NewBinding(
key.WithKeys("esc"),
// key.WithHelp("esc", "cancel"),
key.WithHelp("esc", "取消"),
// key.WithHelp("esc", "取消"),
key.WithHelp("esc", i18n.Get(i18nTpl, "key_cancel")),
),
AcceptWhileFiltering: key.NewBinding(
key.WithKeys("enter", "tab", "shift+tab", "ctrl+k", "up", "ctrl+j", "down"),
// key.WithHelp("enter", "apply filter"),
key.WithHelp("enter", "应用过滤"),
// key.WithHelp("enter", "应用过滤"),
key.WithHelp("enter", i18n.Get(i18nTpl, "key_filter_apply")),
),

// Toggle help.
ShowFullHelp: key.NewBinding(
key.WithKeys("?"),
key.WithHelp("?", "更多"),
// key.WithHelp("?", "更多"),
key.WithHelp("?", i18n.Get(i18nTpl, "key_filter_more")),
),
CloseFullHelp: key.NewBinding(
key.WithKeys("?"),
key.WithHelp("?", "折叠"),
// key.WithHelp("?", "折叠"),
key.WithHelp("?", i18n.Get(i18nTpl, "key_filter_less")),
),

// Quitting.
Expand All @@ -81,19 +91,23 @@ func additionalKeyMap() []key.Binding {
return []key.Binding{
key.NewBinding(
key.WithKeys("n"),
key.WithHelp("n", "新建"),
// key.WithHelp("n", "新建"),
key.WithHelp("n", i18n.Get(i18nTpl, "key_new")),
),
key.NewBinding(
key.WithKeys("r"),
key.WithHelp("r", "重命名"),
// key.WithHelp("r", "重命名"),
key.WithHelp("r", i18n.Get(i18nTpl, "key_rename")),
),
key.NewBinding(
key.WithKeys("e"),
key.WithHelp("e", "编辑"),
// key.WithHelp("e", "编辑"),
key.WithHelp("e", i18n.Get(i18nTpl, "key_edit")),
),
key.NewBinding(
key.WithKeys("d"),
key.WithHelp("d", "删除"),
// key.WithHelp("d", "删除"),
key.WithHelp("d", i18n.Get(i18nTpl, "key_del")),
),
// openDirectoryKey,
// createFileKey,
Expand Down
9 changes: 5 additions & 4 deletions internal/app/file_list/new_file.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,14 @@ import (
"github.com/shalldie/tnote/internal/app/pkgs/dialog"
"github.com/shalldie/tnote/internal/app/store"
"github.com/shalldie/tnote/internal/gist"
"github.com/shalldie/tnote/internal/i18n"
)

func validateFilename(filename string) bool {
if utf8.RuneCountInString(filename) < 3 {

go store.Send(store.StatusPayload{
Message: "文件名长度需要大于3",
Message: i18n.Get(i18nTpl, "new_namevalid"),
Duration: 3,
})
return false
Expand All @@ -24,7 +25,7 @@ func validateFilename(filename string) bool {
func (m *FileListModel) newFile() {
store.Send(dialog.DialogPayload{
Mode: dialog.ModePrompt,
Message: "新建文件,请输入文件名",
Message: i18n.Get(i18nTpl, "new_message"),
FnOK: func(args ...string) bool {
filename := args[0]

Expand All @@ -36,13 +37,13 @@ func (m *FileListModel) newFile() {
go func() {
go store.Send(store.StatusPayload{
Loading: true,
Message: "新建中...",
Message: i18n.Get(i18nTpl, "new_creating"),
})
store.Gist.UpdateFile(filename, &gist.UpdateGistPayload{Content: "To be edited."})

store.Send(store.StatusPayload{
Loading: false,
Message: fmt.Sprintf("「%v」完成新建", filename),
Message: fmt.Sprintf(i18n.Get(i18nTpl, "new_done"), filename),
Duration: 5,
})
store.Send(store.CMD_REFRESH_FILES(filename))
Expand Down
7 changes: 4 additions & 3 deletions internal/app/file_list/rename_file.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@ import (
"github.com/shalldie/tnote/internal/app/pkgs/dialog"
"github.com/shalldie/tnote/internal/app/store"
"github.com/shalldie/tnote/internal/gist"
"github.com/shalldie/tnote/internal/i18n"
)

func (m *FileListModel) renameFile(filename string) {
store.Send(dialog.DialogPayload{
Mode: dialog.ModePrompt,
Message: fmt.Sprintf("重命名文件「%v」", filename),
Message: fmt.Sprintf(i18n.Get(i18nTpl, "rename_message"), filename),
PromptValue: filename,
FnOK: func(args ...string) bool {
newname := args[0]
Expand All @@ -24,14 +25,14 @@ func (m *FileListModel) renameFile(filename string) {
go func() {
go store.Send(store.StatusPayload{
Loading: true,
Message: "重命名中...",
Message: i18n.Get(i18nTpl, "rename_renaming"),
})

store.Gist.UpdateFile(filename, &gist.UpdateGistPayload{Filename: newname})

store.Send(store.StatusPayload{
Loading: false,
Message: fmt.Sprintf("「%v」->「%v」完成重命名", filename, newname),
Message: fmt.Sprintf(i18n.Get(i18nTpl, "rename_done"), filename, newname),
Duration: 5,
})
store.Send(store.CMD_REFRESH_FILES(newname))
Expand Down
8 changes: 5 additions & 3 deletions internal/app/file_panel/editor.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"github.com/shalldie/tnote/internal/app/pkgs/model"
"github.com/shalldie/tnote/internal/app/store"
"github.com/shalldie/tnote/internal/gist"
"github.com/shalldie/tnote/internal/i18n"
"github.com/shalldie/tnote/internal/utils"
)

Expand Down Expand Up @@ -50,14 +51,14 @@ func (m *EditorModel) Save() {

go store.Send(store.StatusPayload{
Loading: true,
Message: "保存中...",
Message: i18n.Get(i18nTpl, "saving"),
})
store.Gist.UpdateFile(file.FileName, &gist.UpdateGistPayload{Content: content})
go store.Send(store.CMD_REFRESH_FILES(""))
go store.Send(store.CMD_UPDATE_FILE(""))
go store.Send(store.StatusPayload{
Loading: false,
Message: fmt.Sprintf("「%v」保存完毕", file.FileName),
Message: fmt.Sprintf(i18n.Get(i18nTpl, "saved"), file.FileName),
Duration: 5,
})
}
Expand Down Expand Up @@ -148,7 +149,8 @@ func (m EditorModel) footerView() string {

func NewEditorModel() EditorModel {
ta := textarea.New()
ta.Placeholder = "please enter..."
ta.Placeholder = i18n.Get(i18nTpl, "editor_placeholder")
// ta.Placeholder = "请输入..."
ta.CharLimit = 0

return EditorModel{
Expand Down
15 changes: 15 additions & 0 deletions internal/app/file_panel/i18n.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package file_panel

// FIXME: editor_placeholder 中文开头乱码

var i18nTpl = `
en_US:
saving: saving...
saved: 「%v」saved
editor_placeholder: please enter...
zh_CN:
saving: 保存中...
saved: 「%v」保存完毕
editor_placeholder: please enter...
`
14 changes: 14 additions & 0 deletions internal/app/pkgs/dialog/i18n.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package dialog

var i18nTpl = `
en_US:
cancel: Cancel
ok: OK
placeholder: Please enter...
zh_CN:
cancel: 取消
ok: 确定
placeholder: 请输入...
`

0 comments on commit c00f905

Please sign in to comment.