diff --git a/gui/default/assets/lang/lang-en.json b/gui/default/assets/lang/lang-en.json index 566582748..5ce2b5a96 100644 --- a/gui/default/assets/lang/lang-en.json +++ b/gui/default/assets/lang/lang-en.json @@ -91,6 +91,8 @@ "Downloaded": "Downloaded", "Downloading": "Downloading", "Edit": "Edit", + "Edit Device": "Edit Device", + "Edit Folder": "Edit Folder", "Editing {%path%}.": "Editing {{path}}.", "Enable Crash Reporting": "Enable Crash Reporting", "Enable NAT traversal": "Enable NAT traversal", @@ -373,6 +375,7 @@ "You have unsaved changes. Do you really want to discard them?": "You have unsaved changes. Do you really want to discard them?", "You must keep at least one version.": "You must keep at least one version.", "days": "days", + "directories": "directories", "files": "files", "full documentation": "full documentation", "items": "items", diff --git a/script/translate.go b/script/translate.go index aee7c9eb3..7d237b1eb 100644 --- a/script/translate.go +++ b/script/translate.go @@ -21,13 +21,14 @@ import ( var trans = make(map[string]string) var attrRe = regexp.MustCompile(`\{\{'([^']+)'\s+\|\s+translate\}\}`) +var attrReCond = regexp.MustCompile(`\{\{.+\s+\?\s+'([^']+)'\s+:\s+'([^']+)'\s+\|\s+translate\}\}`) // exceptions to the untranslated text warning var noStringRe = regexp.MustCompile( `^((\W*\{\{.*?\}\} ?.?\/?.?(bps)?\W*)+(\.stignore)?|[^a-zA-Z]+.?[^a-zA-Z]*|[kMGT]?B|Twitter|JS\W?|DEV|https?://\S+)$`) // exceptions to the untranslated text warning specific to aboutModalView.html -var aboutRe = regexp.MustCompile(`^([^/]+/[^/]+|(The Go Pro|Font Awesome ).+)$`) +var aboutRe = regexp.MustCompile(`^([^/]+/[^/]+|(The Go Pro|Font Awesome ).+|Build \{\{.+\}\}|Copyright .+ the Syncthing Authors\.)$`) func generalNode(n *html.Node, filename string) { translate := false @@ -46,9 +47,13 @@ func generalNode(n *html.Node, filename string) { // copyright notices of other projects return } else { - if matches := attrRe.FindStringSubmatch(a.Val); len(matches) == 2 { + for _, matches := range attrRe.FindAllStringSubmatch(a.Val, -1) { translation(matches[1]) } + for _, matches := range attrReCond.FindAllStringSubmatch(a.Val, -1) { + translation(matches[1]) + translation(matches[2]) + } if a.Key == "data-content" && !noStringRe.MatchString(a.Val) { log.Println("Untranslated data-content string (" + filename + "):")