What changed, and why it matters
This commit is a user-interface polish change for the Krux hardware wallet's 'Datum' tool. It splits a single translated label like 'binary: 123 bytes' into two parts ('binary:' and '123 bytes') so the device can highlight the label prefix differently in an on-screen info box. It also moves a content preview into the same info box. There is no security bug being fixed here.
No security action needed. This is a routine UI/translation refactor.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The change refactors how DatumTool._info_box() builds its display text. Previously about was a single translated string such as t(‘binary: {} bytes’).format(len(…)). Now it stores about_prefix separately (‘binary:’ or ‘text:’) and builds about as prefix + translated ‘%s bytes’/’%s chars’. The highlight_prefix passed to draw_hcentered_text is changed from ‘:’ to self.about_prefix. The preview snippet is appended to parts before drawing instead of being drawn separately afterwards. Translation files and their generated Python arrays are updated accordingly. Tests are updated to match the new string format.
Changed components
src/krux/pages/datum_tool.pysrc/krux/translations/*i18n/translations/*tests/pages/test_datum_tool.pyInspect captured patch +137 / −73
diff --git a/i18n/translations/de-DE.json b/i18n/translations/de-DE.json
index 27932ad..eabecb1 100644
--- a/i18n/translations/de-DE.json
+++ b/i18n/translations/de-DE.json
@@ -3,6 +3,8 @@
"%d of %d multisig": "%d von %d Multisig",
"%d to %d": "%d bis %d ",
"%s bits (%s bits/px)": "%s Bits (%s Bits/px)",
+ "%s bytes": "%s Bytes",
+ "%s chars": "%s Zchn.",
"%s removed.": "%s wurde entfernt.",
"%s: loaded!": "%s: geladen!",
"(Experimental)": "(Experimental)",
@@ -344,7 +346,7 @@
"Words": "Wörter",
"Yes": "Ja",
"Zoomed mode": "Zoommodus",
- "binary: {} bytes": "binär: {} Bytes",
+ "binary:": "binär:",
"failed:": "failed:",
"from HEX": "aus SECHSKANT",
"from base32": "von base32",
@@ -356,7 +358,7 @@
"shift case": "schaltkoffer",
"success rate:": "Erfolgsrate:",
"swipe": "wischen",
- "text: {} chars": "text: {} chars",
+ "text:": "text:",
"to HEX": "zu SECHSKANT",
"to base32": "zu base32",
"to base43": "an base43",
diff --git a/i18n/translations/es-MX.json b/i18n/translations/es-MX.json
index 172f3c1..dc3488e 100644
--- a/i18n/translations/es-MX.json
+++ b/i18n/translations/es-MX.json
@@ -3,6 +3,8 @@
"%d of %d multisig": "%d de %d multisig",
"%d to %d": "%d a %d",
"%s bits (%s bits/px)": "%s bits (%s bits/px)",
+ "%s bytes": "%s bytes",
+ "%s chars": "%s carac.",
"%s removed.": "%s eliminado.",
"%s: loaded!": "%s: ¡cargado!",
"(Experimental)": "(Experimental)",
@@ -344,7 +346,7 @@
"Words": "Palabras",
"Yes": "Sí",
"Zoomed mode": "Modo ampliado",
- "binary: {} bytes": "binary: {} bytes",
+ "binary:": "binario:",
"failed:": "failed:",
"from HEX": "desde HEXADECIMAL",
"from base32": "desde base32",
@@ -356,7 +358,7 @@
"shift case": "caja de cambio",
"success rate:": "Tasa de éxito:",
"swipe": "deslizar",
- "text: {} chars": "text: {} caracteres",
+ "text:": "texto:",
"to HEX": "a HEXADECIMAL",
"to base32": "a base32",
"to base43": "a base43",
diff --git a/i18n/translations/fr-FR.json b/i18n/translations/fr-FR.json
index d364302..320aa6c 100644
--- a/i18n/translations/fr-FR.json
+++ b/i18n/translations/fr-FR.json
@@ -3,6 +3,8 @@
"%d of %d multisig": "%d de %d multisignature",
"%d to %d": "%d à %d",
"%s bits (%s bits/px)": "%s bits (%s bits/px)",
+ "%s bytes": "%s octets",
+ "%s chars": "%s car.",
"%s removed.": "%s supprimé.",
"%s: loaded!": "%s : chargé !",
"(Experimental)": "(Expérimental)",
@@ -344,7 +346,7 @@
"Words": "Mots",
"Yes": "Oui",
"Zoomed mode": "Mode zoomé",
- "binary: {} bytes": "binaire : {} octets",
+ "binary:": "binaire :",
"failed:": "echoué",
"from HEX": "depuis HEXA.",
"from base32": "depuis base32",
@@ -356,7 +358,7 @@
"shift case": "casse des caractères",
"success rate:": "Taux de réussite:",
"swipe": "glisser",
- "text: {} chars": "texte : {} car.",
+ "text:": "texte :",
"to HEX": "vers HEXA.",
"to base32": "vers base32",
"to base43": "vers base43",
diff --git a/i18n/translations/ja-JP.json b/i18n/translations/ja-JP.json
index 85a0006..8079272 100644
--- a/i18n/translations/ja-JP.json
+++ b/i18n/translations/ja-JP.json
@@ -3,6 +3,8 @@
"%d of %d multisig": "%d の%d マルチシグネチャ",
"%d to %d": "%d へ %d",
"%s bits (%s bits/px)": "%sビット(%sビット/px)",
+ "%s bytes": "%s バイト",
+ "%s chars": "%s 文字",
"%s removed.": "%s 削除されました.",
"%s: loaded!": "%s:読み込まれました!",
"(Experimental)": "(実験的)",
@@ -344,7 +346,7 @@
"Words": "単語",
"Yes": "はい",
"Zoomed mode": "ズームモード",
- "binary: {} bytes": "バイナリ: {}バイト",
+ "binary:": "バイナリ:",
"failed:": "失敗",
"from HEX": "16進数から",
"from base32": "base 32から",
@@ -356,7 +358,7 @@
"shift case": "シフトケース",
"success rate:": "成功率:",
"swipe": "スワイプ",
- "text: {} chars": "text: {}文字",
+ "text:": "テキスト:",
"to HEX": "16進数に",
"to base32": "base 32に",
"to base43": "base 43に",
diff --git a/i18n/translations/ko-KR.json b/i18n/translations/ko-KR.json
index dd4726c..919298e 100644
--- a/i18n/translations/ko-KR.json
+++ b/i18n/translations/ko-KR.json
@@ -3,6 +3,8 @@
"%d of %d multisig": "%d의 %d 멀티시그",
"%d to %d": "%d 부터 %d",
"%s bits (%s bits/px)": "%s 비트 (%s 비트/픽셀)",
+ "%s bytes": "%s 바이트",
+ "%s chars": "%s 자",
"%s removed.": "%s 제거되었습니다.",
"%s: loaded!": "%s: 로드됨!",
"(Experimental)": "(실험적 기능)",
@@ -344,7 +346,7 @@
"Words": "시드문구",
"Yes": "예",
"Zoomed mode": "확대 모드",
- "binary: {} bytes": "바이너리: {} 바이트",
+ "binary:": "바이너리:",
"failed:": "실패",
"from HEX": "16진수부터",
"from base32": "base32에서",
@@ -356,7 +358,7 @@
"shift case": "시프트 케이스",
"success rate:": "성공률:",
"swipe": "스와이프",
- "text: {} chars": "text: {} chars",
+ "text:": "텍스트:",
"to HEX": "16진수로",
"to base32": "base32로",
"to base43": "to base43",
diff --git a/i18n/translations/nl-NL.json b/i18n/translations/nl-NL.json
index dd76550..ef8a6d6 100644
--- a/i18n/translations/nl-NL.json
+++ b/i18n/translations/nl-NL.json
@@ -3,6 +3,8 @@
"%d of %d multisig": "%d van %d multisig",
"%d to %d": "%d tot %d",
"%s bits (%s bits/px)": "%s bits (%s bits/px)",
+ "%s bytes": "%s bytes",
+ "%s chars": "%s tek.",
"%s removed.": "%s verwijderd.",
"%s: loaded!": "%s: geladen!",
"(Experimental)": "(Experimenteel)",
@@ -344,7 +346,7 @@
"Words": "Woorden",
"Yes": "Yes",
"Zoomed mode": "Ingezoomde modus",
- "binary: {} bytes": "binair: {} bytes",
+ "binary:": "binair:",
"failed:": "mislukt",
"from HEX": "van HEX",
"from base32": "vanaf base32",
@@ -356,7 +358,7 @@
"shift case": "schuifgeval",
"success rate:": "Slaagkans:",
"swipe": "veeg",
- "text: {} chars": "tekst: {} tekens",
+ "text:": "tekst:",
"to HEX": "om te HEXEREN",
"to base32": "naar base32",
"to base43": "naar base43",
diff --git a/i18n/translations/pt-BR.json b/i18n/translations/pt-BR.json
index 86af9c9..069ea4f 100644
--- a/i18n/translations/pt-BR.json
+++ b/i18n/translations/pt-BR.json
@@ -3,6 +3,8 @@
"%d of %d multisig": "%d de %d multisig",
"%d to %d": "%d a %d",
"%s bits (%s bits/px)": "%s bits (%s bits/px)",
+ "%s bytes": "%s bytes",
+ "%s chars": "%s carac.",
"%s removed.": "%s excluído.",
"%s: loaded!": "%s: carregado!",
"(Experimental)": "(Experimental)",
@@ -344,7 +346,7 @@
"Words": "Palavras",
"Yes": "Sim",
"Zoomed mode": "Modo ampliado",
- "binary: {} bytes": "binary: {} bytes",
+ "binary:": "binário:",
"failed:": "falha",
"from HEX": "from HEX",
"from base32": "da base32",
@@ -356,7 +358,7 @@
"shift case": "Trocar caixa",
"success rate:": "Taxa de sucesso:",
"swipe": "deslize",
- "text: {} chars": "text: {} caracteres",
+ "text:": "texto:",
"to HEX": "para HEXADECIMAL",
"to base32": "para base32",
"to base43": "para base43",
diff --git a/i18n/translations/ru-RU.json b/i18n/translations/ru-RU.json
index 8b64411..34723a5 100644
--- a/i18n/translations/ru-RU.json
+++ b/i18n/translations/ru-RU.json
@@ -3,6 +3,8 @@
"%d of %d multisig": "%d из %d мультиподпись",
"%d to %d": "%d к %d",
"%s bits (%s bits/px)": "%s бит (%s бит/px)",
+ "%s bytes": "%s байт",
+ "%s chars": "%s симв.",
"%s removed.": "%s удален.",
"%s: loaded!": "%s: загружено!",
"(Experimental)": "(Эксперементальный)",
@@ -344,7 +346,7 @@
"Words": "Слова",
"Yes": "Да",
"Zoomed mode": "Режим масштабирования",
- "binary: {} bytes": "binary: {} байт",
+ "binary:": "двоичный:",
"failed:": "неудачно",
"from HEX": "от ШЕСТИГРАННИКА",
"from base32": "от базы32",
@@ -356,7 +358,7 @@
"shift case": "случай смены",
"success rate:": "Коэффициент успеха:",
"swipe": "проведите",
- "text: {} chars": "text: {} символы",
+ "text:": "текст:",
"to HEX": "к ШЕСТИГРАННОЙ",
"to base32": "к основанию32",
"to base43": "к основанию43",
diff --git a/i18n/translations/tr-TR.json b/i18n/translations/tr-TR.json
index a272ecf..715dfef 100644
--- a/i18n/translations/tr-TR.json
+++ b/i18n/translations/tr-TR.json
@@ -3,6 +3,8 @@
"%d of %d multisig": "%d / %d çoklu imza",
"%d to %d": "%d to %d",
"%s bits (%s bits/px)": "%s bit (%s bit/piksel)",
+ "%s bytes": "%s bayt",
+ "%s chars": "%s kar.",
"%s removed.": "%s kaldırıldı.",
"%s: loaded!": "%s: yüklendi!",
"(Experimental)": "(Deneysel)",
@@ -344,7 +346,7 @@
"Words": "Kelimeler",
"Yes": "Evet",
"Zoomed mode": "Zoom Mod",
- "binary: {} bytes": "ikili: {} bayt",
+ "binary:": "ikili:",
"failed:": "Kalınan: ",
"from HEX": "oNALTILIKTAN",
"from base32": "base32 'den",
@@ -356,7 +358,7 @@
"shift case": "vites kutusu",
"success rate:": "Başarı Puanı:",
"swipe": "kaydırın",
- "text: {} chars": "metin: {} karakter",
+ "text:": "metin:",
"to HEX": "to HEX",
"to base32": "üsse32",
"to base43": "üsse43",
diff --git a/i18n/translations/vi-VN.json b/i18n/translations/vi-VN.json
index 8216ed7..da7e97b 100644
--- a/i18n/translations/vi-VN.json
+++ b/i18n/translations/vi-VN.json
@@ -3,6 +3,8 @@
"%d of %d multisig": "%d của %d đa chữ kí",
"%d to %d": "%d đến %d",
"%s bits (%s bits/px)": "%s bit (%s bit/px)",
+ "%s bytes": "%s byte",
+ "%s chars": "%s ký tự",
"%s removed.": "%s Đã bỏ.",
"%s: loaded!": "%s: đã tải!",
"(Experimental)": "(Thực nghiệm)",
@@ -298,7 +300,7 @@
"Test Suite": "Bộ thử nghiệm",
"Test Suite Results": "Kết quả bộ thử nghiệm",
"Test:": "Kiểm tra bài cũ:",
- "Text": "Chữ",
+ "Text": "Văn bản",
"Theme": "Chủ đề",
"Thermal": "Nhiệt",
"To ensure data is unrecoverable use Wipe Device feature": "Sử dụng tính năng Xóa dữ liệu trên thiết bị để đảm bảo dữ liệu không thể phục hồi",
@@ -344,7 +346,7 @@
"Words": "Từ ngữ",
"Yes": "Đúng",
"Zoomed mode": "Chế độ thu phóng",
- "binary: {} bytes": "nhị phân: {} byte",
+ "binary:": "nhị phân:",
"failed:": "trượt",
"from HEX": "từ HEX",
"from base32": "từ base32",
@@ -356,7 +358,7 @@
"shift case": "trường hợp ca làm việc",
"success rate:": "Tỉ lệ thành công:",
"swipe": "vuốt",
- "text: {} chars": "text: {} ký tự",
+ "text:": "văn bản:",
"to HEX": "thành HEX",
"to base32": "đến base32",
"to base43": "đến base43",
diff --git a/i18n/translations/zh-CN.json b/i18n/translations/zh-CN.json
index 0c30f15..2eb4f33 100644
--- a/i18n/translations/zh-CN.json
+++ b/i18n/translations/zh-CN.json
@@ -3,6 +3,8 @@
"%d of %d multisig": "%d/%d 多签",
"%d to %d": "%d到%d",
"%s bits (%s bits/px)": "%s位 (%s位/像素)",
+ "%s bytes": "%s 字节",
+ "%s chars": "%s 个字符",
"%s removed.": "已移除%s",
"%s: loaded!": "%s :已加载!",
"(Experimental)": "(实验性)",
@@ -344,7 +346,7 @@
"Words": "单词",
"Yes": "是",
"Zoomed mode": "放大模式",
- "binary: {} bytes": "二进制: {}字节",
+ "binary:": "二进制:",
"failed:": "失败",
"from HEX": "从十六进制",
"from base32": "从base32",
@@ -354,9 +356,9 @@
"from utf8": "从utf8",
"is a valid address!": " 非有效地址",
"shift case": "移位案例",
- "success rate:": "成功率:",
+ "success rate:": "成功率:",
"swipe": "滑动",
- "text: {} chars": "text: {}个字符",
+ "text:": "文本:",
"to HEX": "成为十六进制",
"to base32": "到base32",
"to base43": "到base43",
diff --git a/src/krux/pages/datum_tool.py b/src/krux/pages/datum_tool.py
index d350eab..2cac04d 100644
--- a/src/krux/pages/datum_tool.py
+++ b/src/krux/pages/datum_tool.py
@@ -391,6 +391,7 @@ class DatumTool(Page):
self.ctx = ctx
self.contents = None
self.encodings = []
+ self.about_prefix = None
self.about = None
self.title = None
self.datum = None
@@ -553,23 +554,22 @@ class DatumTool(Page):
]
),
]
+ if preview:
+ parts.append(
+ self.fit_to_line(
+ (
+ '"' + self.contents + '"'
+ if isinstance(self.contents, str)
+ else "0x" + hexlify(self.contents).decode()
+ ),
+ crop_middle=False,
+ )
+ )
num_lines = self.ctx.display.draw_hcentered_text(
"\n".join(p for p in parts if p),
info_box=True,
- highlight_prefix=":",
+ highlight_prefix=self.about_prefix,
)
- if preview:
- self.ctx.display.draw_hcentered_text(
- (
- '"' + self.contents + '"'
- if isinstance(self.contents, str)
- else "0x" + hexlify(self.contents).decode()
- ),
- offset_y=DEFAULT_PADDING + num_lines * FONT_HEIGHT + 2,
- max_lines=1,
- info_box=True,
- )
- num_lines += 1
return num_lines
@@ -647,7 +647,8 @@ class DatumTool(Page):
"""
if isinstance(self.contents, bytes):
- self.about = t("binary: {} bytes").format(len(self.contents))
+ self.about_prefix = t("binary:")
+ self.about = self.about_prefix + " " + t("%s bytes") % len(self.contents)
try:
as_str = self.contents.decode()
suggestion = str(detect_encodings(as_str, False)[0])
@@ -668,7 +669,8 @@ class DatumTool(Page):
self.oneline_viewable = False
elif isinstance(self.contents, str):
- self.about = t("text: {} chars").format(len(self.contents))
+ self.about_prefix = t("text:")
+ self.about = self.about_prefix + " " + t("%s chars") % len(self.contents)
self.encodings = detect_encodings(self.contents)
# does it look like a 12 or 24 word mnemonic / Mnemonic QR?
diff --git a/src/krux/translations/__init__.py b/src/krux/translations/__init__.py
index 20346e2..ff5987c 100644
--- a/src/krux/translations/__init__.py
+++ b/src/krux/translations/__init__.py
@@ -37,6 +37,8 @@ ref_array = [
1185266064,
1503087751,
2405586747,
+ 2032388104,
+ 3012047951,
1178563089,
1696437881,
3348584292,
@@ -378,7 +380,7 @@ ref_array = [
2965123464,
1303016265,
619317523,
- 1318651592,
+ 1688347225,
3673250051,
2790566116,
3432495124,
@@ -390,7 +392,7 @@ ref_array = [
917737941,
615831403,
3680102825,
- 1711283058,
+ 288746123,
202776360,
1735708505,
1597139208,
diff --git a/src/krux/translations/de.py b/src/krux/translations/de.py
index a3bf96d..9c131ad 100644
--- a/src/krux/translations/de.py
+++ b/src/krux/translations/de.py
@@ -25,6 +25,8 @@ translation_array = [
"%d von %d Multisig",
"%d bis %d ",
"%s Bits (%s Bits/px)",
+ "%s Bytes",
+ "%s Zchn.",
"%s wurde entfernt.",
"%s: geladen!",
"(Experimental)",
@@ -366,7 +368,7 @@ translation_array = [
"Wörter",
"Ja",
"Zoommodus",
- "binär: {} Bytes",
+ "binär:",
"failed:",
"aus SECHSKANT",
"von base32",
@@ -378,7 +380,7 @@ translation_array = [
"schaltkoffer",
"Erfolgsrate:",
"wischen",
- "text: {} chars",
+ "text:",
"zu SECHSKANT",
"zu base32",
"an base43",
diff --git a/src/krux/translations/es.py b/src/krux/translations/es.py
index 8ed0a08..63cf180 100644
--- a/src/krux/translations/es.py
+++ b/src/krux/translations/es.py
@@ -25,6 +25,8 @@ translation_array = [
"%d de %d multisig",
"%d a %d",
"%s bits (%s bits/px)",
+ "%s bytes",
+ "%s carac.",
"%s eliminado.",
"%s: ¡cargado!",
"(Experimental)",
@@ -366,7 +368,7 @@ translation_array = [
"Palabras",
"Sí",
"Modo ampliado",
- "binary: {} bytes",
+ "binario:",
"failed:",
"desde HEXADECIMAL",
"desde base32",
@@ -378,7 +380,7 @@ translation_array = [
"caja de cambio",
"Tasa de éxito:",
"deslizar",
- "text: {} caracteres",
+ "texto:",
"a HEXADECIMAL",
"a base32",
"a base43",
diff --git a/src/krux/translations/fr.py b/src/krux/translations/fr.py
index d30b78f..1c4f858 100644
--- a/src/krux/translations/fr.py
+++ b/src/krux/translations/fr.py
@@ -25,6 +25,8 @@ translation_array = [
"%d de %d multisignature",
"%d à %d",
"%s bits (%s bits/px)",
+ "%s octets",
+ "%s car.",
"%s supprimé.",
"%s\u2009: chargé\u2009!",
"(Expérimental)",
@@ -366,7 +368,7 @@ translation_array = [
"Mots",
"Oui",
"Mode zoomé",
- "binaire\u2009: {} octets",
+ "binaire\u2009:",
"echoué",
"depuis HEXA.",
"depuis base32",
@@ -378,7 +380,7 @@ translation_array = [
"casse des caractères",
"Taux de réussite:",
"glisser",
- "texte\u2009: {} car.",
+ "texte\u2009:",
"vers HEXA.",
"vers base32",
"vers base43",
diff --git a/src/krux/translations/ja.py b/src/krux/translations/ja.py
index 8da0f97..7b0bb7e 100644
--- a/src/krux/translations/ja.py
+++ b/src/krux/translations/ja.py
@@ -25,6 +25,8 @@ translation_array = [
"%d の%d マルチシグネチャ",
"%d へ %d",
"%sビット(%sビット/px)",
+ "%s バイト",
+ "%s 文字",
"%s 削除されました.",
"%s:読み込まれました!",
"(実験的)",
@@ -366,7 +368,7 @@ translation_array = [
"単語",
"はい",
"ズームモード",
- "バイナリ: {}バイト",
+ "バイナリ:",
"失敗",
"16進数から",
"base 32から",
@@ -378,7 +380,7 @@ translation_array = [
"シフトケース",
"成功率:",
"スワイプ",
- "text: {}文字",
+ "テキスト:",
"16進数に",
"base 32に",
"base 43に",
diff --git a/src/krux/translations/ko.py b/src/krux/translations/ko.py
index 020cdf3..cacfb18 100644
--- a/src/krux/translations/ko.py
+++ b/src/krux/translations/ko.py
@@ -25,6 +25,8 @@ translation_array = [
"%d의 %d 멀티시그",
"%d 부터 %d",
"%s 비트 (%s 비트/픽셀)",
+ "%s 바이트",
+ "%s 자",
"%s 제거되었습니다.",
"%s: 로드됨!",
"(실험적 기능)",
@@ -366,7 +368,7 @@ translation_array = [
"시드문구",
"예",
"확대 모드",
- "바이너리: {} 바이트",
+ "바이너리:",
"실패",
"16진수부터",
"base32에서",
@@ -378,7 +380,7 @@ translation_array = [
"시프트 케이스",
"성공률:",
"스와이프",
- "text: {} chars",
+ "텍스트:",
"16진수로",
"base32로",
"to base43",
diff --git a/src/krux/translations/nl.py b/src/krux/translations/nl.py
index ef316c0..adec580 100644
--- a/src/krux/translations/nl.py
+++ b/src/krux/translations/nl.py
@@ -25,6 +25,8 @@ translation_array = [
"%d van %d multisig",
"%d tot %d",
"%s bits (%s bits/px)",
+ "%s bytes",
+ "%s tek.",
"%s verwijderd.",
"%s: geladen!",
"(Experimenteel)",
@@ -366,7 +368,7 @@ translation_array = [
"Woorden",
"Yes",
"Ingezoomde modus",
- "binair: {} bytes",
+ "binair:",
"mislukt",
"van HEX",
"vanaf base32",
@@ -378,7 +380,7 @@ translation_array = [
"schuifgeval",
"Slaagkans:",
"veeg",
- "tekst: {} tekens",
+ "tekst:",
"om te HEXEREN",
"naar base32",
"naar base43",
diff --git a/src/krux/translations/pt.py b/src/krux/translations/pt.py
index 269862c..106e96f 100644
--- a/src/krux/translations/pt.py
+++ b/src/krux/translations/pt.py
@@ -25,6 +25,8 @@ translation_array = [
"%d de %d multisig",
"%d a %d",
"%s bits (%s bits/px)",
+ "%s bytes",
+ "%s carac.",
"%s excluído.",
"%s: carregado!",
"(Experimental)",
@@ -366,7 +368,7 @@ translation_array = [
"Palavras",
"Sim",
"Modo ampliado",
- "binary: {} bytes",
+ "binário:",
"falha",
"from HEX",
"da base32",
@@ -378,7 +380,7 @@ translation_array = [
"Trocar caixa",
"Taxa de sucesso:",
"deslize",
- "text: {} caracteres",
+ "texto:",
"para HEXADECIMAL",
"para base32",
"para base43",
diff --git a/src/krux/translations/ru.py b/src/krux/translations/ru.py
index 3e6d0c0..78167ef 100644
--- a/src/krux/translations/ru.py
+++ b/src/krux/translations/ru.py
@@ -25,6 +25,8 @@ translation_array = [
"%d из %d мультиподпись",
"%d к %d",
"%s бит (%s бит/px)",
+ "%s байт",
+ "%s симв.",
"%s удален.",
"%s: загружено!",
"(Эксперементальный)",
@@ -366,7 +368,7 @@ translation_array = [
"Слова",
"Да",
"Режим масштабирования",
- "binary: {} байт",
+ "двоичный:",
"неудачно",
"от ШЕСТИГРАННИКА",
"от базы32",
@@ -378,7 +380,7 @@ translation_array = [
"случай смены",
"Коэффициент успеха:",
"проведите",
- "text: {} символы",
+ "текст:",
"к ШЕСТИГРАННОЙ",
"к основанию32",
"к основанию43",
diff --git a/src/krux/translations/tr.py b/src/krux/translations/tr.py
index 1b08e67..21c1f69 100644
--- a/src/krux/translations/tr.py
+++ b/src/krux/translations/tr.py
@@ -25,6 +25,8 @@ translation_array = [
"%d / %d çoklu imza",
"%d to %d",
"%s bit (%s bit/piksel)",
+ "%s bayt",
+ "%s kar.",
"%s kaldırıldı.",
"%s: yüklendi!",
"(Deneysel)",
@@ -366,7 +368,7 @@ translation_array = [
"Kelimeler",
"Evet",
"Zoom Mod",
- "ikili: {} bayt",
+ "ikili:",
"Kalınan: ",
"oNALTILIKTAN",
"base32 'den",
@@ -378,7 +380,7 @@ translation_array = [
"vites kutusu",
"Başarı Puanı:",
"kaydırın",
- "metin: {} karakter",
+ "metin:",
"to HEX",
"üsse32",
"üsse43",
diff --git a/src/krux/translations/vi.py b/src/krux/translations/vi.py
index cde185a..bb098ab 100644
--- a/src/krux/translations/vi.py
+++ b/src/krux/translations/vi.py
@@ -25,6 +25,8 @@ translation_array = [
"%d của %d đa chữ kí",
"%d đến %d",
"%s bit (%s bit/px)",
+ "%s byte",
+ "%s ký tự",
"%s Đã bỏ.",
"%s: đã tải!",
"(Thực nghiệm)",
@@ -320,7 +322,7 @@ translation_array = [
"Bộ thử nghiệm",
"Kết quả bộ thử nghiệm",
"Kiểm tra bài cũ:",
- "Chữ",
+ "Văn bản",
"Chủ đề",
"Nhiệt",
"Sử dụng tính năng Xóa dữ liệu trên thiết bị để đảm bảo dữ liệu không thể phục hồi",
@@ -366,7 +368,7 @@ translation_array = [
"Từ ngữ",
"Đúng",
"Chế độ thu phóng",
- "nhị phân: {} byte",
+ "nhị phân:",
"trượt",
"từ HEX",
"từ base32",
@@ -378,7 +380,7 @@ translation_array = [
"trường hợp ca làm việc",
"Tỉ lệ thành công:",
"vuốt",
- "text: {} ký tự",
+ "văn bản:",
"thành HEX",
"đến base32",
"đến base43",
diff --git a/src/krux/translations/zh.py b/src/krux/translations/zh.py
index a212715..993f874 100644
--- a/src/krux/translations/zh.py
+++ b/src/krux/translations/zh.py
@@ -25,6 +25,8 @@ translation_array = [
"%d/%d 多签",
"%d到%d",
"%s位 (%s位/像素)",
+ "%s 字节",
+ "%s 个字符",
"已移除%s",
"%s :已加载!",
"(实验性)",
@@ -366,7 +368,7 @@ translation_array = [
"单词",
"是",
"放大模式",
- "二进制: {}字节",
+ "二进制:",
"失败",
"从十六进制",
"从base32",
@@ -376,9 +378,9 @@ translation_array = [
"从utf8",
" 非有效地址",
"移位案例",
- "成功率:",
+ "成功率:",
"滑动",
- "text: {}个字符",
+ "文本:",
"成为十六进制",
"到base32",
"到base43",
diff --git a/tests/pages/test_datum_tool.py b/tests/pages/test_datum_tool.py
index b635a3d..b862e15 100644
--- a/tests/pages/test_datum_tool.py
+++ b/tests/pages/test_datum_tool.py
@@ -632,11 +632,18 @@ def test_datumtool__info_box(m5stickv, mocker):
page.contents = "Loaded string contents in DatumTool"
page.title = "Text"
page.datum = ""
- page.about = "about"
+ page.about_prefix = "t:"
+ page.about = page.about_prefix + " about"
page._info_box()
assert ctx.input.wait_for_button.call_count == 0
ctx.display.draw_hcentered_text.assert_has_calls(
- [mocker.call("Text\nabout", info_box=True, highlight_prefix=":")]
+ [
+ mocker.call(
+ 'Text\nt: about\n"Loaded string …',
+ info_box=True,
+ highlight_prefix=page.about_prefix,
+ )
+ ]
)
# call with bytes
@@ -645,11 +652,18 @@ def test_datumtool__info_box(m5stickv, mocker):
page.contents = b"\xde\xad\xbe\xef"
page.title = "Bytes"
page.datum = ""
- page.about = "about"
+ page.about_prefix = "t:"
+ page.about = page.about_prefix + " about"
page._info_box()
assert ctx.input.wait_for_button.call_count == 0
ctx.display.draw_hcentered_text.assert_has_calls(
- [mocker.call("Bytes\nabout", info_box=True, highlight_prefix=":")]
+ [
+ mocker.call(
+ "Bytes\nt: about\n0xdeadbeef",
+ info_box=True,
+ highlight_prefix=page.about_prefix,
+ )
+ ]
)
@@ -664,11 +678,12 @@ def test_datumtool__show_contents(m5stickv, mocker):
page.contents = "Loaded string contents in DatumTool"
page.title = "Text"
page.datum = ""
- page.about = "about"
+ page.about_prefix = "t:"
+ page.about = page.about_prefix + " about"
page._show_contents()
assert ctx.input.wait_for_button.call_count == 3
ctx.display.draw_hcentered_text.assert_called_with(
- "Text\nabout p.1", info_box=True, highlight_prefix=":"
+ "Text\nt: about p.1", info_box=True, highlight_prefix=page.about_prefix
)
# call with bytes
@@ -677,11 +692,12 @@ def test_datumtool__show_contents(m5stickv, mocker):
page.contents = b"\xde\xad\xbe\xef"
page.title = "Bytes"
page.datum = ""
- page.about = "about"
+ page.about_prefix = "t:"
+ page.about = page.about_prefix + " about"
page._show_contents()
assert ctx.input.wait_for_button.call_count == 1
ctx.display.draw_hcentered_text.assert_called_with(
- "Bytes\nabout p.1", info_box=True, highlight_prefix=":"
+ "Bytes\nt: about p.1", info_box=True, highlight_prefix=page.about_prefix
)
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.