"""Norske tekster og vårt navn inn i web-klientens språkfiler. Erstatter en `sed 's/Bitwarden/Vaultnord/g'` over hele fila. Den byttet navn også i JSON-nøklene, og da slutter klienten å finne strengen - atten tekster forsvant i stillhet, blant dem hele onboardingen. Samtidig slapp atten andre unna, fordi de skriver navnet med liten forbokstav midt i en setning. Reglene her: * Nøkler røres aldri. De er klientens oppslagsord. * Bare verdier byttes, og bare som helt ord. * URL-er står urørt. bitwarden.com er deres adresse, ikke vår. * Noen tekster handler faktisk om Bitwarden sine egne produkter - nettleser- utvidelsen, Authenticator, Families. Å kalle dem våre ville vært å påstå at vi eier noe andre har laget. """ import json import re import sys # Tekster som virkelig handler om Bitwarden, og som skal fortsette å gjøre det. BEHOLD = { "twoStepContinueToBitwardenUrlTitle", "twoStepContinueToBitwardenUrlDesc", "openBitwardenExtension", "contactBitwardenSupport", "moreProductsFromBitwarden", "moreFromBitwarden", "sponsoredBitwardenFamilies", "sponsorshipFreeBitwardenFamilies", "acceptBitwardenFamiliesHelp", "youHaveBitwardenPremium", "startYour7DayFreeTrialOfBitwarden", "startYour7DayFreeTrialOfBitwardenFor", "startYour7DayFreeTrialOfBitwardenSecretsManagerFor", "toHostBitwardenOnYourOwnServer", } URL = re.compile(r"https?://[^\s\"<>]+|[\w.-]+@[\w.-]+|bitwarden\.com", re.I) ORD = re.compile(r"\bbitwarden\b", re.I) def bytt(tekst: str, navn: str) -> str: """Bytter navnet i en tekst, men lar adresser stå.""" vern = [] def gjem(m): vern.append(m.group(0)) return f"\x00{len(vern) - 1}\x00" trygg = URL.sub(gjem, tekst) trygg = ORD.sub(navn, trygg) return re.sub(r"\x00(\d+)\x00", lambda m: vern[int(m.group(1))], trygg) def rebrand(data: dict, navn: str) -> dict: ut = {} for nokkel, verdi in data.items(): if nokkel in BEHOLD or not isinstance(verdi, dict): ut[nokkel] = verdi continue ny = dict(verdi) if isinstance(ny.get("message"), str): ny["message"] = bytt(ny["message"], navn) ut[nokkel] = ny # nøkkelen selv står urørt return ut # Det bygget skal stoppe på. Hver linje er en feil vi har hatt. KONTROLLER = [ ("vaultWelcomeDialogTitle", "Velkommen", True, "norsk velkomsttekst mangler"), ("logInToBitwarden", "Vaultnord", True, "verdien er ikke byttet"), ("turnOnNewDeviceLoginProtectionModalDesc", "bitwarden", False, "liten forbokstav slapp unna"), ("openBitwardenExtension", "Bitwarden", True, "unntaket ble overkjørt"), ] def sjekk(sti: str) -> int: data = json.load(open(sti)) feil = [] for nokkel, ord_, skal_finnes, hvorfor in KONTROLLER: if nokkel not in data: feil.append(f"{nokkel}: nøkkelen er borte - er den døpt om?") continue har = ord_.lower() in data[nokkel].get("message", "").lower() if har != skal_finnes: feil.append(f"{nokkel}: {hvorfor}") if "bitwarden.com" not in json.dumps(data): feil.append("adressene til bitwarden.com skal stå urørt") for f in feil: print(f" FEIL {f}", file=sys.stderr) if not feil: print(" språkfilene ser riktige ut") return 1 if feil else 0 def main() -> int: if sys.argv[1] == "--sjekk": return sjekk(sys.argv[2]) sti, navn = sys.argv[1], sys.argv[2] over = json.load(open(sys.argv[3])) if len(sys.argv) > 3 else {} data = json.load(open(sti)) data.update(over) # våre egne tekster først json.dump(rebrand(data, navn), open(sti, "w"), ensure_ascii=False, indent=1) return 0 if __name__ == "__main__": sys.exit(main())