1
0
forked from GRIN/grim

tor: translate per-user-tor strings, zh-Hant/HK auto-detect

Translate the 16 new per-user-Tor keys and the changed transport-neutral
goblin.privacy.intro across all 9 non-English locales (de/es/fr/ja/ko/ru/tr/
zh-CN/zh-TW), replacing the slice-3 English placeholders. Confirm
goblin.receive.copy was already translated everywhere.

Normalize zh-Hant, zh-HK, and zh-Hant-* system locales to zh-TW (and
zh-Hans(-*) to zh-CN) in setup_i18n, so Traditional-script systems that
don't report the exact zh-TW tag still land on Traditional instead of
falling through to the default locale.

Note the zh-TW -> zh news-locale fold in news_locale_code as an
intentional, low-priority tradeoff (Traditional readers see the same
zh news feed as Simplified); no new pipeline added.
This commit is contained in:
2ro
2026-07-09 20:43:33 -04:00
parent 8c8c75d18c
commit 25e349a979
11 changed files with 175 additions and 153 deletions
+17 -17
View File
@@ -363,8 +363,8 @@ goblin:
connected_tor: "Über Tor verbunden"
tor_ready: "Tor bereit · Relays…"
connecting_tor: "Verbinde mit Tor…"
connected_direct: "Connected (direct)"
connecting_direct: "Connecting (direct)…"
connected_direct: "Verbunden (direkt)"
connecting_direct: "Verbinde (direkt)…"
cant_reach_node: "Node nicht erreichbar"
node_synced: "Node synchronisiert"
syncing: "Synchronisiere…"
@@ -485,8 +485,8 @@ goblin:
privacy: "Privatsphäre"
tor_routing: "Tor-Routing"
messages_lookups: "Nachrichten & Abfragen"
tor_on: "On"
tor_off: "Off"
tor_on: "Ein"
tor_off: "Aus"
auto_accept: "Automatisch annehmen"
pairing: "Preiswährung"
accept_anyone: "Jeder"
@@ -644,7 +644,7 @@ goblin:
delete_final: "Endgültig löschen"
privacy:
title: "Netzwerk-Privatsphäre"
intro: "Goblin sendet seinen privaten Datenverkehr über Tor und verbirgt so deine IP vor dem Relay — die Verschlüsselung verbirgt den Rest, sodass ein Relay eine Zahlung nicht zu dir zurückverfolgen kann."
intro: "Goblin sendet nur wenige Dinge über das Netzwerk. Hier siehst du, was dein Gerät verlässt und wie es dabei privat bleibt."
payments: "Zahlungen"
payments_blurb: "Jede nostr-Nachricht, die einen slatepack trägt."
usernames: "Benutzernamen"
@@ -655,14 +655,14 @@ goblin:
direct_connection: "Direkte Verbindung"
grin_node: "Grin-Node"
grin_node_blurb: "Block-Synchronisierung und Übertragung deiner Transaktion ins Netzwerk. Dies sind öffentliche Chain-Daten, für alle gleich, und nicht mit deiner Identität verknüpft."
how_privacy: "How your privacy works"
how_privacy_blurb: "Payments and messages are sealed with authenticated encryption and delivered as private messages, so a relay can't read them or link a payment back to you."
always_direct: "Always direct"
tor_off: "Tor off"
tor_on: "Tor on"
tor_switch: "Route through Tor"
tor_switch_sub: "Send your private traffic through the Tor network to hide your IP from relays."
vpn_note: "With Tor off, relays can see your IP address. We recommend using at least a VPN."
how_privacy: "So funktioniert deine Privatsphäre"
how_privacy_blurb: "Zahlungen und Nachrichten werden mit authentifizierter Verschlüsselung versiegelt und als private Nachrichten zugestellt, sodass ein Relay sie weder lesen noch eine Zahlung zu dir zurückverfolgen kann."
always_direct: "Immer direkt"
tor_off: "Tor aus"
tor_on: "Tor an"
tor_switch: "Über Tor leiten"
tor_switch_sub: "Sende deinen privaten Datenverkehr durch das Tor-Netzwerk, um deine IP vor Relays zu verbergen."
vpn_note: "Wenn Tor aus ist, können Relays deine IP-Adresse sehen. Wir empfehlen, zumindest ein VPN zu verwenden."
pairing:
title: "Kopplung"
intro: "Womit dein Guthaben und deine Beträge verglichen werden."
@@ -809,8 +809,8 @@ goblin:
working: "Arbeite…"
onboarding:
privacy:
kicker: "NETWORK PRIVACY"
continue: "Continue"
kicker: "NETZWERK-PRIVATSPHÄRE"
continue: "Weiter"
intro:
private_money_head: "Privates Geld"
private_money_body: "Goblin ist ein Wallet für grin — digitales Bargeld ohne Beträge oder Adressen auf seiner Chain."
@@ -872,8 +872,8 @@ goblin:
key_being_made: "Schlüssel wird erstellt…"
connected_tor: "über Tor verbunden"
connecting_tor: "verbinde über Tor…"
connected_direct: "connected (direct)"
connecting_direct: "connecting (direct)…"
connected_direct: "verbunden (direkt)"
connecting_direct: "verbinde (direkt)…"
fresh_key_blurb: "Ein Zahlungsschlüssel, der nicht Teil deines Seeds ist — jederzeit rotierbar, ohne deine Mittel zu berühren."
restoring: "Deine Identitäten werden wiederhergestellt…"
clean_slate_blurb: "Lust auf einen Neuanfang? Tausche jederzeit einen brandneuen Schlüssel ein — das neue Du ist nicht mit dem alten verknüpft. Gleiches Wallet, frisches Gesicht."
+17 -17
View File
@@ -363,8 +363,8 @@ goblin:
connected_tor: "Conectado por Tor"
tor_ready: "Tor listo · relés…"
connecting_tor: "Conectando a Tor…"
connected_direct: "Connected (direct)"
connecting_direct: "Connecting (direct)…"
connected_direct: "Conectado (directo)"
connecting_direct: "Conectando (directo)…"
cant_reach_node: "No se puede conectar con el nodo"
node_synced: "Nodo sincronizado"
syncing: "Sincronizando…"
@@ -485,8 +485,8 @@ goblin:
privacy: "Privacidad"
tor_routing: "Enrutamiento por Tor"
messages_lookups: "Mensajes y consultas"
tor_on: "On"
tor_off: "Off"
tor_on: "Activado"
tor_off: "Desactivado"
auto_accept: "Aceptación automática"
pairing: "Moneda de referencia"
accept_anyone: "Cualquiera"
@@ -644,7 +644,7 @@ goblin:
delete_final: "Eliminar permanentemente"
privacy:
title: "Privacidad de red"
intro: "Goblin envía su tráfico privado a través de Tor, lo que oculta tu IP del relé — el cifrado oculta el resto, de modo que un relé no puede vincular un pago contigo."
intro: "Goblin envía solo unas pocas cosas a través de la red. Esto es lo que sale de tu dispositivo, y cómo se mantiene privado."
payments: "Pagos"
payments_blurb: "Cada mensaje de nostr que transporta un slatepack."
usernames: "nombres de usuario"
@@ -655,14 +655,14 @@ goblin:
direct_connection: "Conexión directa"
grin_node: "Nodo de Grin"
grin_node_blurb: "Sincronización de bloques y transmisión de tu transacción a la red. Estos son datos públicos de la cadena, iguales para todos, y no están vinculados a tu identidad."
how_privacy: "How your privacy works"
how_privacy_blurb: "Payments and messages are sealed with authenticated encryption and delivered as private messages, so a relay can't read them or link a payment back to you."
always_direct: "Always direct"
tor_off: "Tor off"
tor_on: "Tor on"
tor_switch: "Route through Tor"
tor_switch_sub: "Send your private traffic through the Tor network to hide your IP from relays."
vpn_note: "With Tor off, relays can see your IP address. We recommend using at least a VPN."
how_privacy: "Cómo funciona tu privacidad"
how_privacy_blurb: "Los pagos y mensajes se sellan con cifrado autenticado y se entregan como mensajes privados, de modo que un relé no puede leerlos ni vincular un pago contigo."
always_direct: "Siempre directo"
tor_off: "Tor desactivado"
tor_on: "Tor activado"
tor_switch: "Enrutar a través de Tor"
tor_switch_sub: "Envía tu tráfico privado a través de la red Tor para ocultar tu IP de los relés."
vpn_note: "Con Tor desactivado, los relés pueden ver tu dirección IP. Te recomendamos usar al menos una VPN."
pairing:
title: "Referencia de precio"
intro: "Aquello contra lo que se muestran tu saldo y tus montos."
@@ -809,8 +809,8 @@ goblin:
working: "Procesando…"
onboarding:
privacy:
kicker: "NETWORK PRIVACY"
continue: "Continue"
kicker: "PRIVACIDAD DE RED"
continue: "Continuar"
intro:
private_money_head: "Dinero privado"
private_money_body: "Goblin es una billetera para grin — dinero digital sin montos ni direcciones en su cadena."
@@ -872,8 +872,8 @@ goblin:
key_being_made: "creando clave…"
connected_tor: "conectado por Tor"
connecting_tor: "conectando por Tor…"
connected_direct: "connected (direct)"
connecting_direct: "connecting (direct)…"
connected_direct: "conectado (directo)"
connecting_direct: "conectando (directo)…"
fresh_key_blurb: "Una clave de pago que no forma parte de tu frase de recuperación — rótala cuando quieras para mantener la privacidad, sin tocar tus fondos."
restoring: "Restaurando tus identidades…"
clean_slate_blurb: "¿Quieres empezar de cero? Cambia a una clave totalmente nueva cuando quieras — el nuevo tú no está vinculado al anterior. Misma billetera, cara nueva."
+17 -17
View File
@@ -363,8 +363,8 @@ goblin:
connected_tor: "Connecté via Tor"
tor_ready: "Tor prêt · relais…"
connecting_tor: "Connexion à Tor…"
connected_direct: "Connected (direct)"
connecting_direct: "Connecting (direct)…"
connected_direct: "Connecté (direct)"
connecting_direct: "Connexion (directe)…"
cant_reach_node: "Nœud injoignable"
node_synced: "Nœud synchronisé"
syncing: "Synchronisation…"
@@ -485,8 +485,8 @@ goblin:
privacy: "Confidentialité"
tor_routing: "Routage par Tor"
messages_lookups: "Messages et recherches"
tor_on: "On"
tor_off: "Off"
tor_on: "Activé"
tor_off: "Désactivé"
auto_accept: "Acceptation auto"
pairing: "Devise des prix"
accept_anyone: "Tout le monde"
@@ -644,7 +644,7 @@ goblin:
delete_final: "Supprimer définitivement"
privacy:
title: "Confidentialité réseau"
intro: "Goblin envoie son trafic privé via Tor, qui masque votre IP au relais — le chiffrement masque le reste, afin qu'un relais ne puisse pas relier un paiement à vous."
intro: "Goblin n'envoie que peu de choses sur le réseau. Voici ce qui quitte votre appareil, et comment cela reste privé."
payments: "Paiements"
payments_blurb: "Chaque message nostr transportant un slatepack."
usernames: "Noms d'utilisateur"
@@ -655,14 +655,14 @@ goblin:
direct_connection: "Connexion directe"
grin_node: "Nœud grin"
grin_node_blurb: "Synchronisation des blocs et diffusion de votre transaction sur le réseau. Ce sont des données de chaîne publiques, identiques pour tous, et non liées à votre identité."
how_privacy: "How your privacy works"
how_privacy_blurb: "Payments and messages are sealed with authenticated encryption and delivered as private messages, so a relay can't read them or link a payment back to you."
always_direct: "Always direct"
tor_off: "Tor off"
tor_on: "Tor on"
tor_switch: "Route through Tor"
tor_switch_sub: "Send your private traffic through the Tor network to hide your IP from relays."
vpn_note: "With Tor off, relays can see your IP address. We recommend using at least a VPN."
how_privacy: "Comment fonctionne votre confidentialité"
how_privacy_blurb: "Les paiements et les messages sont scellés par un chiffrement authentifié et envoyés comme messages privés, de sorte qu'un relais ne peut ni les lire ni relier un paiement à vous."
always_direct: "Toujours direct"
tor_off: "Tor désactivé"
tor_on: "Tor activé"
tor_switch: "Acheminer via Tor"
tor_switch_sub: "Envoyez votre trafic privé via le réseau Tor pour masquer votre IP aux relais."
vpn_note: "Lorsque Tor est désactivé, les relais peuvent voir votre adresse IP. Nous vous recommandons d'utiliser au moins un VPN."
pairing:
title: "Appairage"
intro: "Ce à quoi votre solde et vos montants sont comparés."
@@ -809,8 +809,8 @@ goblin:
working: "En cours…"
onboarding:
privacy:
kicker: "NETWORK PRIVACY"
continue: "Continue"
kicker: "CONFIDENTIALITÉ RÉSEAU"
continue: "Continuer"
intro:
private_money_head: "Argent privé"
private_money_body: "Goblin est un portefeuille pour grin — de l'argent numérique sans montants ni adresses sur sa chaîne."
@@ -872,8 +872,8 @@ goblin:
key_being_made: "clé en cours de création…"
connected_tor: "connecté via Tor"
connecting_tor: "connexion via Tor…"
connected_direct: "connected (direct)"
connecting_direct: "connecting (direct)…"
connected_direct: "connecté (direct)"
connecting_direct: "connexion (directe)…"
fresh_key_blurb: "Une clé de paiement qui ne fait pas partie de votre seed — renouvelable à tout moment, sans toucher à vos fonds."
restoring: "Restauration de vos identités…"
clean_slate_blurb: "Envie de repartir à zéro ? Remplacez par une toute nouvelle clé à tout moment — le nouveau vous n'est pas lié à l'ancien. Même portefeuille, nouveau visage."
+17 -17
View File
@@ -363,8 +363,8 @@ goblin:
connected_tor: "Tor経由で接続済み"
tor_ready: "Tor準備完了 · リレー…"
connecting_tor: "Torに接続中…"
connected_direct: "Connected (direct)"
connecting_direct: "Connecting (direct)…"
connected_direct: "接続済み(直接)"
connecting_direct: "接続中(直接)…"
cant_reach_node: "ノードに接続できません"
node_synced: "ノード同期済み"
syncing: "同期中…"
@@ -485,8 +485,8 @@ goblin:
privacy: "プライバシー"
tor_routing: "Torルーティング"
messages_lookups: "メッセージと検索"
tor_on: "On"
tor_off: "Off"
tor_on: "オン"
tor_off: "オフ"
auto_accept: "自動承認"
pairing: "価格通貨"
accept_anyone: "誰でも"
@@ -644,7 +644,7 @@ goblin:
delete_final: "完全に削除"
privacy:
title: "ネットワークプライバシー"
intro: "Goblinはプライベートな通信をTor経由で送信し、リレーからIPアドレスを隠します — 暗号化がそれ以外の情報を隠すため、リレーが支払いをあなたに結び付けることはできません。"
intro: "Goblinがネットワーク経由で送信するのはごくわずかな情報だけです。あなたの端末から出ていく情報と、それがどのように非公開に保たれるかをご覧ください。"
payments: "支払い"
payments_blurb: "slatepackを運ぶすべてのnostrメッセージです。"
usernames: "ユーザー名"
@@ -655,14 +655,14 @@ goblin:
direct_connection: "直接接続"
grin_node: "Grinノード"
grin_node_blurb: "ブロックの同期と、取引をネットワークにブロードキャストする処理です。これは誰にとっても同じ公開されたチェーンデータであり、あなたのアイデンティティとは結び付いていません。"
how_privacy: "How your privacy works"
how_privacy_blurb: "Payments and messages are sealed with authenticated encryption and delivered as private messages, so a relay can't read them or link a payment back to you."
always_direct: "Always direct"
tor_off: "Tor off"
tor_on: "Tor on"
tor_switch: "Route through Tor"
tor_switch_sub: "Send your private traffic through the Tor network to hide your IP from relays."
vpn_note: "With Tor off, relays can see your IP address. We recommend using at least a VPN."
how_privacy: "プライバシーの仕組み"
how_privacy_blurb: "支払いとメッセージは認証付き暗号化で封印され、プライベートメッセージとして届けられます。そのためリレーはそれらを読み取ることも、支払いをあなたに結び付けることもできません。"
always_direct: "常に直接接続"
tor_off: "Torオフ"
tor_on: "Torオン"
tor_switch: "Tor経由でルーティング"
tor_switch_sub: "プライベートな通信をTorネットワーク経由で送信し、リレーからIPアドレスを隠します。"
vpn_note: "Torがオフの場合、リレーはあなたのIPアドレスを見ることができます。少なくともVPNの利用をお勧めします。"
pairing:
title: "価格通貨"
intro: "残高や金額を表示する際の基準となる通貨です。"
@@ -809,8 +809,8 @@ goblin:
working: "処理中…"
onboarding:
privacy:
kicker: "NETWORK PRIVACY"
continue: "Continue"
kicker: "ネットワークプライバシー"
continue: "続ける"
intro:
private_money_head: "プライベートなお金"
private_money_body: "Goblinはgrin用のウォレットです — チェーン上に金額もアドレスも残らないデジタルキャッシュです。"
@@ -873,8 +873,8 @@ goblin:
key_being_made: "キーを作成中…"
connected_tor: "Tor経由で接続済み"
connecting_tor: "Tor経由で接続中…"
connected_direct: "connected (direct)"
connecting_direct: "connecting (direct)…"
connected_direct: "接続済み(直接)"
connecting_direct: "接続中(直接)…"
fresh_key_blurb: "リカバリーフレーズの一部ではない支払い用のキーです — 資金に影響を与えることなく、いつでもローテーションしてプライバシーを保てます。"
restoring: "アイデンティティを復元しています…"
clean_slate_blurb: "まっさらな状態にしたいですか? いつでもまったく新しいキーに切り替えられます — 新しいあなたは古いあなたと結び付きません。同じウォレットで、新しい顔になります。"
+17 -17
View File
@@ -363,8 +363,8 @@ goblin:
connected_tor: "Tor로 연결됨"
tor_ready: "Tor 준비 완료 · 릴레이…"
connecting_tor: "Tor에 연결하는 중…"
connected_direct: "Connected (direct)"
connecting_direct: "Connecting (direct)…"
connected_direct: "연결됨 (직접)"
connecting_direct: "연결 중 (직접)…"
cant_reach_node: "노드에 연결할 수 없음"
node_synced: "노드 동기화됨"
syncing: "동기화하는 중…"
@@ -485,8 +485,8 @@ goblin:
privacy: "프라이버시"
tor_routing: "Tor 라우팅"
messages_lookups: "메시지 및 조회"
tor_on: "On"
tor_off: "Off"
tor_on: "켜짐"
tor_off: "꺼짐"
auto_accept: "자동 수락"
pairing: "기준 통화"
accept_anyone: "누구나"
@@ -644,7 +644,7 @@ goblin:
delete_final: "영구 삭제"
privacy:
title: "네트워크 프라이버시"
intro: "Goblin은 개인 트래픽을 Tor를 통해 전송해 릴레이로부터 내 IP를 숨깁니다 — 암호화가 나머지를 숨겨서 릴레이가 결제를 나와 연결 지을 수 없습니다."
intro: "Goblin은 네트워크를 통해 아주 적은 정보만 전송합니다. 여기서 내 기기에서 무엇이 나가는지, 그리고 그것이 어떻게 비공개로 유지되는지 확인하세요."
payments: "결제"
payments_blurb: "slatepack을 담은 모든 nostr 메시지입니다."
usernames: "사용자 이름"
@@ -655,14 +655,14 @@ goblin:
direct_connection: "직접 연결"
grin_node: "Grin 노드"
grin_node_blurb: "블록 동기화와 거래를 네트워크에 전파하는 과정입니다. 이는 모두에게 동일한 공개 체인 데이터이며 신원과 연결되지 않습니다."
how_privacy: "How your privacy works"
how_privacy_blurb: "Payments and messages are sealed with authenticated encryption and delivered as private messages, so a relay can't read them or link a payment back to you."
always_direct: "Always direct"
tor_off: "Tor off"
tor_on: "Tor on"
tor_switch: "Route through Tor"
tor_switch_sub: "Send your private traffic through the Tor network to hide your IP from relays."
vpn_note: "With Tor off, relays can see your IP address. We recommend using at least a VPN."
how_privacy: "프라이버시가 작동하는 방식"
how_privacy_blurb: "결제와 메시지는 인증된 암호화로 봉인되어 비공개 메시지로 전달되므로, 릴레이가 이를 읽거나 결제를 나와 연결 지을 수 없습니다."
always_direct: "항상 직접 연결"
tor_off: "Tor 꺼짐"
tor_on: "Tor 켜짐"
tor_switch: "Tor로 라우팅"
tor_switch_sub: "개인 트래픽을 Tor 네트워크를 통해 전송해 릴레이로부터 IP를 숨깁니다."
vpn_note: "Tor가 꺼져 있으면 릴레이가 내 IP 주소를 볼 수 있습니다. 최소한 VPN 사용을 권장합니다."
pairing:
title: "기준 통화"
intro: "내 잔액과 금액이 어떤 통화로 표시되는지입니다."
@@ -809,8 +809,8 @@ goblin:
working: "처리하는 중…"
onboarding:
privacy:
kicker: "NETWORK PRIVACY"
continue: "Continue"
kicker: "네트워크 프라이버시"
continue: "계속"
intro:
private_money_head: "프라이빗한 돈"
private_money_body: "Goblin은 grin을 위한 지갑입니다 — 체인에 금액도 주소도 남지 않는 디지털 현금입니다."
@@ -872,8 +872,8 @@ goblin:
key_being_made: "키를 만드는 중…"
connected_tor: "Tor로 연결됨"
connecting_tor: "Tor로 연결하는 중…"
connected_direct: "connected (direct)"
connecting_direct: "connecting (direct)…"
connected_direct: "연결됨 (직접)"
connecting_direct: "연결 중 (직접)…"
fresh_key_blurb: "복구 문구에 속하지 않는 결제 키입니다 — 자금은 그대로 둔 채 언제든 교체해 프라이버시를 지키세요."
restoring: "신원을 복원하는 중…"
clean_slate_blurb: "새 출발을 원하시나요? 언제든 완전히 새로운 키로 바꾸세요 — 새로운 나는 이전과 연결되지 않습니다. 같은 지갑, 새로운 얼굴입니다."
+17 -17
View File
@@ -363,8 +363,8 @@ goblin:
connected_tor: "Подключено через Tor"
tor_ready: "Tor готов · реле…"
connecting_tor: "Подключение к Tor…"
connected_direct: "Connected (direct)"
connecting_direct: "Connecting (direct)…"
connected_direct: "Подключено (напрямую)"
connecting_direct: "Подключение (напрямую)…"
cant_reach_node: "Нет связи с узлом"
node_synced: "Узел синхронизирован"
syncing: "Синхронизация…"
@@ -485,8 +485,8 @@ goblin:
privacy: "Приватность"
tor_routing: "Маршрутизация через Tor"
messages_lookups: "Сообщения и поиск"
tor_on: "On"
tor_off: "Off"
tor_on: "Вкл"
tor_off: "Выкл"
auto_accept: "Автоприём"
pairing: "Валюта цены"
accept_anyone: "Любой"
@@ -644,7 +644,7 @@ goblin:
delete_final: "Удалить навсегда"
privacy:
title: "Сетевая приватность"
intro: "Goblin отправляет приватный трафик через Tor, который скрывает ваш IP от реле — шифрование скрывает остальное, чтобы реле не могло связать платёж с вами."
intro: "Goblin отправляет по сети лишь немногое. Вот что покидает ваше устройство и как это остаётся приватным."
payments: "Платежи"
payments_blurb: "Каждое nostr-сообщение, несущее slatepack."
usernames: "Имена пользователей"
@@ -655,14 +655,14 @@ goblin:
direct_connection: "Прямое соединение"
grin_node: "Узел Grin"
grin_node_blurb: "Синхронизация блоков и трансляция транзакции в сеть. Это публичные данные цепочки, одинаковые для всех, и они не связаны с вашей личностью."
how_privacy: "How your privacy works"
how_privacy_blurb: "Payments and messages are sealed with authenticated encryption and delivered as private messages, so a relay can't read them or link a payment back to you."
always_direct: "Always direct"
tor_off: "Tor off"
tor_on: "Tor on"
tor_switch: "Route through Tor"
tor_switch_sub: "Send your private traffic through the Tor network to hide your IP from relays."
vpn_note: "With Tor off, relays can see your IP address. We recommend using at least a VPN."
how_privacy: "Как работает ваша приватность"
how_privacy_blurb: "Платежи и сообщения запечатываются аутентифицированным шифрованием и доставляются как приватные сообщения, поэтому реле не может их прочитать или связать платёж с вами."
always_direct: "Всегда напрямую"
tor_off: "Tor выключен"
tor_on: "Tor включён"
tor_switch: "Маршрутизировать через Tor"
tor_switch_sub: "Отправляйте приватный трафик через сеть Tor, чтобы скрыть свой IP от реле."
vpn_note: "Если Tor выключен, реле могут видеть ваш IP-адрес. Рекомендуем использовать хотя бы VPN."
pairing:
title: "Привязка"
intro: "К чему привязаны отображаемые баланс и суммы."
@@ -809,8 +809,8 @@ goblin:
working: "Обработка…"
onboarding:
privacy:
kicker: "NETWORK PRIVACY"
continue: "Continue"
kicker: "СЕТЕВАЯ ПРИВАТНОСТЬ"
continue: "Продолжить"
intro:
private_money_head: "Приватные деньги"
private_money_body: "Goblin — кошелёк для grin: цифровая наличность без сумм и адресов в её цепочке."
@@ -872,8 +872,8 @@ goblin:
key_being_made: "ключ создаётся…"
connected_tor: "подключено через Tor"
connecting_tor: "подключение через Tor…"
connected_direct: "connected (direct)"
connecting_direct: "connecting (direct)…"
connected_direct: "подключено (напрямую)"
connecting_direct: "подключение (напрямую)…"
fresh_key_blurb: "Платёжный ключ, не связанный с seed-фразой — меняйте его в любой момент, не трогая средства."
restoring: "Восстановление ваших личностей…"
clean_slate_blurb: "Хотите начать с чистого листа? Подставьте совершенно новый ключ в любой момент — новый вы не связан со старым. Тот же кошелёк, новое лицо."
+17 -17
View File
@@ -363,8 +363,8 @@ goblin:
connected_tor: "Tor üzerinden bağlı"
tor_ready: "Tor hazır · relaylar…"
connecting_tor: "Tor'a bağlanılıyor…"
connected_direct: "Connected (direct)"
connecting_direct: "Connecting (direct)…"
connected_direct: "Bağlandı (doğrudan)"
connecting_direct: "Bağlanıyor (doğrudan)…"
cant_reach_node: "Düğüme ulaşılamıyor"
node_synced: "Düğüm eşitlendi"
syncing: "Eşitleniyor…"
@@ -485,8 +485,8 @@ goblin:
privacy: "Gizlilik"
tor_routing: "Tor yönlendirme"
messages_lookups: "Mesajlar ve aramalar"
tor_on: "On"
tor_off: "Off"
tor_on: "Açık"
tor_off: "Kapalı"
auto_accept: "Otomatik kabul"
pairing: "Fiyat para birimi"
accept_anyone: "Herkes"
@@ -644,7 +644,7 @@ goblin:
delete_final: "Kalıcı olarak sil"
privacy:
title: "Ağ gizliliği"
intro: "Goblin özel trafiğini Tor üzerinden gönderir ve senin IP adresini relaydan gizler — şifreleme de gerisini gizler, böylece bir relay bir ödemeyi sana bağlayamaz."
intro: "Goblin ağ üzerinden yalnızca birkaç şey gönderir. İşte cihazından neyin çıktığı ve bunun nasıl gizli kaldığı."
payments: "Ödemeler"
payments_blurb: "Slatepack taşıyan her nostr mesajı."
usernames: "usernamelar"
@@ -655,14 +655,14 @@ goblin:
direct_connection: "Doğrudan bağlantı"
grin_node: "Grin düğümü"
grin_node_blurb: "Blok eşitleme ve işlemini ağa yayma. Bu, herkes için aynı olan genel zincir verisidir ve kimliğinle ilişkilendirilmez."
how_privacy: "How your privacy works"
how_privacy_blurb: "Payments and messages are sealed with authenticated encryption and delivered as private messages, so a relay can't read them or link a payment back to you."
always_direct: "Always direct"
tor_off: "Tor off"
tor_on: "Tor on"
tor_switch: "Route through Tor"
tor_switch_sub: "Send your private traffic through the Tor network to hide your IP from relays."
vpn_note: "With Tor off, relays can see your IP address. We recommend using at least a VPN."
how_privacy: "Gizliliğin nasıl çalıştığı"
how_privacy_blurb: "Ödemeler ve mesajlar kimlik doğrulamalı şifrelemeyle mühürlenip özel mesajlar olarak iletilir; böylece bir relay bunları okuyamaz veya bir ödemeyi sana bağlayamaz."
always_direct: "Her zaman doğrudan"
tor_off: "Tor kapalı"
tor_on: "Tor açık"
tor_switch: "Tor üzerinden yönlendir"
tor_switch_sub: "Relaylardan IP adresini gizlemek için özel trafiğini Tor ağı üzerinden gönder."
vpn_note: "Tor kapalıyken relaylar IP adresini görebilir. En azından bir VPN kullanmanı öneririz."
pairing:
title: "Eşleştirme"
intro: "Bakiyenin ve tutarların neye göre gösterildiği."
@@ -809,8 +809,8 @@ goblin:
working: "Çalışıyor…"
onboarding:
privacy:
kicker: "NETWORK PRIVACY"
continue: "Continue"
kicker: "AĞ GİZLİLİĞİ"
continue: "Devam"
intro:
private_money_head: "Özel para"
private_money_body: "Goblin, grin için bir cüzdan — zincirinde tutar ya da adres bulunmayan dijital nakit."
@@ -872,8 +872,8 @@ goblin:
key_being_made: "anahtar oluşturuluyor…"
connected_tor: "Tor üzerinden bağlı"
connecting_tor: "Tor üzerinden bağlanılıyor…"
connected_direct: "connected (direct)"
connecting_direct: "connecting (direct)…"
connected_direct: "bağlandı (doğrudan)"
connecting_direct: "bağlanıyor (doğrudan)…"
fresh_key_blurb: "Seed'inin parçası olmayan bir ödeme anahtarı — paranı hiç ellemeden istediğin an döndür."
restoring: "Kimliklerin geri yükleniyor…"
clean_slate_blurb: "Temiz bir sayfa mı istiyorsun? İstediğin zaman yepyeni bir anahtar tak — yeni sen eskisine bağlı değil. Aynı cüzdan, yeni yüz."
+17 -17
View File
@@ -363,8 +363,8 @@ goblin:
connected_tor: "已通过 Tor 连接"
tor_ready: "Tor 就绪 · 连接中继…"
connecting_tor: "正在连接 Tor…"
connected_direct: "Connected (direct)"
connecting_direct: "Connecting (direct)…"
connected_direct: "已连接(直连)"
connecting_direct: "正在连接(直连)…"
cant_reach_node: "无法连接节点"
node_synced: "节点已同步"
syncing: "同步中…"
@@ -485,8 +485,8 @@ goblin:
privacy: "隐私"
tor_routing: "Tor 路由"
messages_lookups: "消息和查询"
tor_on: "On"
tor_off: "Off"
tor_on: "开启"
tor_off: "关闭"
auto_accept: "自动接受"
pairing: "价格货币"
accept_anyone: "任何人"
@@ -644,7 +644,7 @@ goblin:
delete_final: "永久删除"
privacy:
title: "网络隐私"
intro: "Goblin 通过 Tor 发送其私密流量,向中继隐藏你的 IP — 加密隐藏其余部分,使中继无法将付款关联到你。"
intro: "Goblin 只在网络上发送极少量信息。以下是离开你设备的内容,以及它如何保持私密。"
payments: "付款"
payments_blurb: "每条携带 slatepack 的 nostr 消息。"
usernames: "用户名"
@@ -655,14 +655,14 @@ goblin:
direct_connection: "直接连接"
grin_node: "Grin 节点"
grin_node_blurb: "区块同步及向网络广播你的交易。这是公开的链上数据,对所有人都一样,且不与你的身份关联。"
how_privacy: "How your privacy works"
how_privacy_blurb: "Payments and messages are sealed with authenticated encryption and delivered as private messages, so a relay can't read them or link a payment back to you."
always_direct: "Always direct"
tor_off: "Tor off"
tor_on: "Tor on"
tor_switch: "Route through Tor"
tor_switch_sub: "Send your private traffic through the Tor network to hide your IP from relays."
vpn_note: "With Tor off, relays can see your IP address. We recommend using at least a VPN."
how_privacy: "你的隐私如何运作"
how_privacy_blurb: "付款和消息都用认证加密进行封装,并以私密消息的形式送达,因此中继既无法读取内容,也无法将付款关联到你。"
always_direct: "始终直连"
tor_off: "Tor 已关闭"
tor_on: "Tor 已开启"
tor_switch: "通过 Tor 路由"
tor_switch_sub: "将你的私密流量通过 Tor 网络发送,向中继隐藏你的 IP。"
vpn_note: "关闭 Tor 后,中继可以看到你的 IP 地址。我们建议你至少使用 VPN"
pairing:
title: "配对"
intro: "你的余额和金额以何种货币显示。"
@@ -809,8 +809,8 @@ goblin:
working: "处理中…"
onboarding:
privacy:
kicker: "NETWORK PRIVACY"
continue: "Continue"
kicker: "网络隐私"
continue: "继续"
intro:
private_money_head: "私密货币"
private_money_body: "Goblin 是一个 grin 钱包 — 链上无金额、无地址的数字现金。"
@@ -872,8 +872,8 @@ goblin:
key_being_made: "正在生成密钥…"
connected_tor: "已通过 Tor 连接"
connecting_tor: "正在通过 Tor 连接…"
connected_direct: "connected (direct)"
connecting_direct: "connecting (direct)…"
connected_direct: "已连接(直连)"
connecting_direct: "正在连接(直连)…"
fresh_key_blurb: "一个不属于助记词的支付密钥——可随时轮换以保护隐私,且不影响你的资金。"
restoring: "正在恢复你的身份…"
clean_slate_blurb: "想要全新开始?随时换上一个全新密钥 — 新的你与旧的毫无关联。同一个钱包,焕然一新。"
+17 -17
View File
@@ -363,8 +363,8 @@ goblin:
connected_tor: "已透過 Tor 連線"
tor_ready: "Tor 就緒 · 連線中繼…"
connecting_tor: "正在連線 Tor…"
connected_direct: "Connected (direct)"
connecting_direct: "Connecting (direct)…"
connected_direct: "已連線(直連)"
connecting_direct: "正在連線(直連)…"
cant_reach_node: "無法連線節點"
node_synced: "節點已同步"
syncing: "同步中…"
@@ -485,8 +485,8 @@ goblin:
privacy: "隱私"
tor_routing: "Tor 路由"
messages_lookups: "訊息和查詢"
tor_on: "On"
tor_off: "Off"
tor_on: "開啟"
tor_off: "關閉"
auto_accept: "自動接受"
pairing: "價格貨幣"
accept_anyone: "任何人"
@@ -644,7 +644,7 @@ goblin:
delete_final: "永久刪除"
privacy:
title: "網路隱私"
intro: "Goblin 透過 Tor 傳送其私密流量,向中繼隱藏你的 IP — 加密隱藏其餘部分,使中繼無法將付款關聯到你。"
intro: "Goblin 只在網路上傳送極少量資訊。以下是離開你裝置的內容,以及它如何保持私密。"
payments: "付款"
payments_blurb: "每條攜帶 slatepack 的 nostr 訊息。"
usernames: "使用者名稱"
@@ -655,14 +655,14 @@ goblin:
direct_connection: "直接連線"
grin_node: "Grin 節點"
grin_node_blurb: "區塊同步及向網路廣播你的交易。這是公開的鏈上資料,對所有人都一樣,且不與你的身份關聯。"
how_privacy: "How your privacy works"
how_privacy_blurb: "Payments and messages are sealed with authenticated encryption and delivered as private messages, so a relay can't read them or link a payment back to you."
always_direct: "Always direct"
tor_off: "Tor off"
tor_on: "Tor on"
tor_switch: "Route through Tor"
tor_switch_sub: "Send your private traffic through the Tor network to hide your IP from relays."
vpn_note: "With Tor off, relays can see your IP address. We recommend using at least a VPN."
how_privacy: "你的隱私如何運作"
how_privacy_blurb: "付款和訊息都用認證加密進行封裝,並以私密訊息的形式送達,因此中繼既無法讀取內容,也無法將付款關聯到你。"
always_direct: "始終直連"
tor_off: "Tor 已關閉"
tor_on: "Tor 已開啟"
tor_switch: "透過 Tor 路由"
tor_switch_sub: "將你的私密流量透過 Tor 網路傳送,向中繼隱藏你的 IP。"
vpn_note: "關閉 Tor 後,中繼可以看到你的 IP 位址。我們建議你至少使用 VPN"
pairing:
title: "配對"
intro: "你的餘額和金額以何種貨幣顯示。"
@@ -809,8 +809,8 @@ goblin:
working: "處理中…"
onboarding:
privacy:
kicker: "NETWORK PRIVACY"
continue: "Continue"
kicker: "網路隱私"
continue: "繼續"
intro:
private_money_head: "私密貨幣"
private_money_body: "Goblin 是一個 grin 錢包 — 鏈上無金額、無地址的數字現金。"
@@ -872,8 +872,8 @@ goblin:
key_being_made: "正在生成金鑰…"
connected_tor: "已透過 Tor 連線"
connecting_tor: "正在透過 Tor 連線…"
connected_direct: "connected (direct)"
connecting_direct: "connecting (direct)…"
connected_direct: "已連線(直連)"
connecting_direct: "正在連線(直連)…"
fresh_key_blurb: "一個不屬於助記詞的支付金鑰——可隨時輪換以保護隱私,且不影響你的資金。"
restoring: "正在恢復你的身份…"
clean_slate_blurb: "想要全新開始?隨時換上一個全新金鑰 — 新的你與舊的毫無關聯。同一個錢包,煥然一新。"
+5
View File
@@ -451,6 +451,11 @@ fn news_pool(wallet: &Wallet) -> Vec<NewsItem> {
/// Traditional readers currently match the same `zh` news as Simplified),
/// and every other locale already is a two-letter primary. Region and
/// separator (`-`/`_`) are dropped.
///
/// The `zh-TW` -> `zh` fold is intentional, not a bug: Traditional-script
/// readers get the same `zh` news feed as Simplified readers (there is no
/// separate Traditional article pipeline). This is an accepted, low-priority
/// gap — building a distinct Traditional news feed is out of scope here.
fn news_locale_code() -> String {
let loc = rust_i18n::locale().to_string().to_lowercase();
loc.split(['-', '_']).next().unwrap_or("en").to_string()
+17
View File
@@ -371,6 +371,23 @@ fn setup_i18n() {
// sys_locale may hand back either `zh-CN` or `zh_CN`; normalize the
// separator so a region-specific locale can match its file name.
let normalized = locale.replace('_', "-");
// The OS may also report Chinese by script/region subtag instead of the
// exact file names we ship (`zh-CN`, `zh-TW`): `zh-Hans`/`zh-Hans-CN` for
// Simplified, and `zh-Hant`/`zh-Hant-TW`/`zh-Hant-HK`/`zh-HK` for
// Traditional (Hong Kong has no locale file of its own but uses
// Traditional characters, same as Taiwan). Fold those onto our two
// Chinese locale files before the exact/primary-subtag match below, so
// e.g. a Hong Kong or generic `zh-Hant` system lands on Traditional
// instead of falling through to the default locale.
let lower = normalized.to_lowercase();
let normalized = if lower == "zh-hant" || lower == "zh-hk" || lower.starts_with("zh-hant-")
{
String::from("zh-TW")
} else if lower == "zh-hans" || lower.starts_with("zh-hans-") {
String::from("zh-CN")
} else {
normalized
};
let available = rust_i18n::available_locales!();
// Prefer an exact region match (e.g. `zh-CN`, the only CJK locale and one
// the bare-subtag fallback could never reach), then the language subtag