Update: catatan rilis & hint terlihat, kunci terjemahan dicek tes

- Catatan rilis ditaruh di tengah Border (VScroll di Fyne punya MinSize kecil,
  jadi sebagai 'top' isinya cuma dapat 32px dan terpotong)
- Tombol Back sebelumnya memakai kunci terjemahan yang belum ada di tabel;
  ditambah tes yang memastikan semua kunci T() ada dan tidak ada kunci nganggur
- README: bagian Updates + cara publish rilis
This commit is contained in:
oxpoe committed 2026-10-13 08:03:53 +07:00
1 parent e8fa35d70d
commit ffc412863a
4 files changed
+75 -12

No files matched your search

+38
View File
@@ -3,6 +3,7 @@ package ui
import (
"os"
"path/filepath"
"regexp"
"strings"
"testing"
"time"
@@ -70,3 +71,40 @@ func TestDialogsOpenWithoutPanic(t *testing.T) {
// jadi sisa goroutine bisa bertabrakan dengan tes berikutnya kalau dibiarkan.
time.Sleep(300 * time.Millisecond)
}
// TestStringsCoverUsedKeys memastikan setiap kunci T() yang dipakai ada di tabel
// terjemahan (kalau tidak, UI menampilkan nama kunci mentah).
func TestStringsCoverUsedKeys(t *testing.T) {
files, err := filepath.Glob("*.go")
if err != nil {
t.Fatal(err)
}
used := map[string]bool{}
for _, file := range files {
if strings.HasSuffix(file, "_test.go") {
continue
}
data, err := os.ReadFile(file)
if err != nil {
t.Fatal(err)
}
for _, m := range regexp.MustCompile(`T\("([a-z_]+)"\)`).FindAllStringSubmatch(string(data), -1) {
used[m[1]] = true
}
}
if len(used) == 0 {
t.Fatal("tidak ada kunci T() yang ditemukan")
}
for key := range used {
if _, ok := tr[key]; !ok {
t.Errorf("kunci %q dipakai tapi tidak ada di tabel terjemahan", key)
}
}
// dan sebaliknya: kunci terjemahan yang tidak terpakai sebaiknya dihapus
for key := range tr {
if !used[key] {
t.Errorf("kunci %q ada di tabel terjemahan tapi tidak dipakai", key)
}
}
}