GH GambleHub

Interfacce multi-lingue e localizzazione

1) Principi

1. La lingua non è uno skin. I testi, i formati, la direzione di scrittura, le illustrazioni, i blocchi legali e persino la navigazione cambiano.
2. Prima le chiavi, poi i testi. Struttura le chiavi di significato e le impostazioni - le traduzioni vengono in seguito.
3. Pseudolocalizzazione - prima dell'uscita. Catturare sovraccarichi, righe rigide e anglicismi nascosti.
4. I Falback sono prevedibili. Niente fallimenti silenziosi.
5. Sicurezza. Nessun HTML da traduzione in DON senza assistenza sanitaria; playsholder solo di posizione/denominazione.
6. Equivalenza A11y. Alt-testi, aria-etichette, abbreviazioni - tutto è localizzato.

2) Strategia locale

Codici di sistema: «language-REGION» (ad esempio «pt-BR», «en-GB»).
Selezione locale: profilo utente personalizzato di ricambio - l'auto per browser/geo (con conferma).
Multi-Regione: differenziare la lingua dal diritto «es-ES» «es-MX» (leggi/pagamenti/limiti diversi).
Catena di Falback: UI è la lingua più vicina; testi legali sono una versione strettamente regionale, altrimenti un blocco e una richiesta di conferma.

3) Architettura e contenuti delle informazioni

Le aree chiave sono navigazione, CTA, errori, moduli, suggerimenti, notifiche, e-mail, PDF/banner.
Estensione testo: riserva di larghezza + 30-40% (tedesco/finlandese). Layout è elastico (flex/grid).
Tono/stile: dizionario del marchio (termini senza «traduzione dello slang» in punti critici).
Immagini/icone: evitare il testo nelle immagini; Se necessario, conserva le versioni locali.

4) Architettura i18n

Le chiavi sono «domain». section. intent` → `payments. withdraw. error. insufficient_funds`.
Playsholder: denominato ('{amount}', '{minute}'), formattato fuori riga.
ICU MessageFormat: pluralità, genere, coerenza.
File: per locali e domini ('/i18n/{ locale }/{ domain} .json ') e carichi pigri.
Server/client: render universale, locale nei cookie + HTTP-Vary.

Esempio chiave (ICU):
json
{
"betslip": {
"placed": "{amount} {currency} bid accepted,"
"timeout": "Waiting for confirmation... ~ {seconds, plural, one {# sec} few {# sec} many {# sec} other {# sec}}"
}
}

5) Formattazione: numeri, date, valute, unità

Usa Intl:
js const nf = new Intl. NumberFormat('uk-UA', { style:'currency', currency:'UAH' });
nf. format(2000); // 2 000,00 ₴

const df = new Intl. DateTimeFormat('tr-TR', { dateStyle:'medium', timeStyle:'short' });
df. format(new Date());

const pl = new Intl. PluralRules('ru-RU');

Unità minori: conserva le somme in centesimi/centesimi; formattare il client.
Ora relativa: 'Intl. RelativeTimeFormat`.
Unità dì Intl ". NumberFormat({ style:'unit', unit:'meter' })`.
Calendario/settimana: 1 ° giorno della settimana e formato data per locale.

6) RTL e direzione della lettera

Supportare "dir =" rtl "per" ar "," he "," fa "; usa dir = auto per i contenuti personalizzati.
Inverte le icone/chevron's; specchio di caroselli e stepper.
I numeri/simboli di valuta sono finestre LTR (evitare il caos misto).
Proprietà logiche CSS ('inline-start/end') invece di left/right.

7) Moduli e input

Nomi/indirizzi: permetti apostrofi/diacritica/doppi cognomi.
Telefoni: E.164 storage; maschere - morbide, con il supporto per l'inserimento.
Formati di indirizzo: ordine dei campi per paese; indice/stato potrebbero mancare.
Le tastiere sono «inputmode», «autocomplete» corrette per il locale.
Playsholder: esempi in lingua/formato locale.

8) Pseudolocalizzazione e test

Sostituisci automaticamente le righe con « » + estensione «+ + +» (} 35%).
Includere lo pseudolocale nell'assieme def come «qps-ploc».
Screenshot con contesti per traduttori: evidenziazione di playsholder e testi lunghi.
Prova: ritagli, spostamenti, sovraccarichi, righe «cucite», RTL.

9) Notifiche, lettere, modelli

Modello di scrittura e di argomento per ogni locale; Separare testi e cerchi.
Le date/gli importi in oggetto sono formattati localmente.
I collegamenti Configura notifiche sono sempre nella lingua della lettera.
SMS: brevemente, senza virgolette a più righe; UTM - Senza localizzazione.

10) Sicurezza e affidabilità

Non interpretare mai la traduzione come HTML, utilizzare le inserzioni sicure.
I playsholder sono solo dati, non marcatori.
I loghi/metriche sono incontrollabili, ma con la localizzazione per i problemi di tracsing.
Folback quando il file di traduzione non è disponibile è silenzioso (mostra inglese + telemetria).

11) Prestazioni

Chanci traduzioni su percorsi/domini; precarica per frequenti.
Кеш CDN с `ETag`/`Cache-Control`.
Evitare i rettificatori quando cambi locali - Contesto i18n con memorizzazione.

12) Specificità del iGaming

Disclaim e gioco responsabile: la formulazione dipende dal paese (18 +/21 +, regolatori, linee di aiuto).
KYC/AML: termini giuridicamente corretti (ad esempio «Fonte fondi», «Beneficiario proprietario»), opzioni di decadenza/parto.
Metodi di pagamento: denominazione locale (PIX, Papara, SEPA) e condizioni (ETA/commissione) - rigorosamente per regione.
I coefficienti e il formato «decimal/fractional/american» sono spiegazioni e esempi locali.
Testi legali: versioni regionali invariate; Vietare al folback un'altra giurisdizione.

13) Token di progettazione (esempio)

json
{
"i18n": {
"fallback": ["en"],
"rtl": ["ar", "he", "fa"],
"textExpansionPct": 0. 35,
"screenshotHints": true
},
"typography": {
"lineHeight": { "ui": 1. 4, "dense": 1. 3 },
"hyphens": "auto",
"tabularNums": true
},
"layout": {
"minLabelWidth": 96,
"gap": { "sm": 8, "md": 12, "lg": 16 }
},
"a11y": {
"ariaMirroring": true,
"altTranslate": true,
"contrastAA": true
}
}

14) Snippet

React + i18next (caricamento pigro, ICU):
ts import i18n from 'i18next';
import ICU from 'i18next-icu';
import { initReactI18next } from 'react-i18next';

i18n. use(ICU). use(initReactI18next). init({
lng: 'uk-UA',
fallbackLng: ['ru', 'en'],
load: 'languageOnly',
interpolation: { escapeValue: false },
resources: {}//empty - loadim lazy
});

export async function loadNamespace(ns: string, lng = i18n. language){
const mod = await import(`/i18n/${lng}/${ns}.json`);
i18n. addResourceBundle(lng, ns, mod. default, true, true);
}
ICU (RUS/Ukr):
json
{
"notifications": "{count, plural, one {# notification} few {# notifications} many {# notifications} other {# notifications}}"
}
Intl valuta/data:
js const money = (v, c, l) => new Intl. NumberFormat(l, {style:'currency', currency:c}). format(v/100);
const rel = (v, unit, l) => new Intl. RelativeTimeFormat(l, {numeric:'auto'}). format(v, unit);
// money(250000,'EUR','de-DE') → 2. 500,00 €
Classe RTL alla radice:
js const rtl = new Set(['ar','he','fa']);
document. documentElement. dir = rtl. has(locale. split('-')[0])? 'rtl': 'ltr';
Pseudolocale (def):
js const pseudo = s => s. replace(/[aAeEiIoOuU]/g, m => ({a:'à',e:'ê',i:'ï',o:'ô',u:'û'}[m. toLowerCase()]        m)). replace(/([^\s])/g,'$1\u0301');

15) Vuoti/errori/grassofoli di degrado

Nessuna traduzione chiave: mostra inglese + logem «missing _ key».
Nessun file locale: folback e striscione «Parte interfaccia in inglese».
Testo troppo lungo, «line-clamp» per posizione, tooltip con testo completo.

16) Metriche e controllo qualità

Coverage% per chiavi/locali (target 98%).
Time-to-Translate (TTT) per le nuove release.
Bug rate L10n - Ritagli visivi, difetti RTL, formati errati.
Reading ease (sondaggio soggettivo) e NPS per locale.
Validazione legale per regione (listino della compilazione).

17) Antipattern

Concatenare le righe nel codice («Hai vinto + amount +!») - Rompe la grammatica.
Testo nelle immagini/icone senza versione locale.
Larghezze rigide sotto l'inglese.
Sostituzione del diritto nazionale con la lingua (usà es-ES "per il Messico).
Traduzione HTML da CMS senza assistenza sanitaria.
Stessa chiave con significati diversi in posti diversi.

18) Lista assegni QA

Righe e chiavi

  • Playsholder nominati; nessuna concatenazione.
  • La coltivazione ICU/lignea.
  • La catena di falback funziona.

Layout e disponibilità

  • Riserva di larghezza + 30-40%; 'line-clamp', traduzione di parole.
  • Alt/aria-etichette localizzate.
  • RTL specchia icone/navigazione; i numeri sono leggibili.

Formati

  • Data/valuta tramite «Intl»; gli importi delle unità minori.
  • Indirizzo/telefono/nome - regole flessibili per paese.

Sicurezza/Performance

  • Le traduzioni non eseguono HTML; XSS escluso.
  • Cianfrusaglie pigre, cash CDN, senza troppi ritorni.

Specifica iGaming

  • Disclaim/18 +/linee di aiuto - giurisdizione.
  • I testi KYC/AML sono legalmente riconducibili.
  • Nomi di pagamento/ETA/commissione - locali.

19) Documentazione in progettazione

Разделы: i18n Tokens, Guides (ICU/Plural/RTL), Patterns (Emails/SMS/Toasts), Legal Strings per Region.
Strumenti: pseudolocale, screenshoter, rapporto coverage, linter chiavi.
Processo: glossario, Translation Memory, screenshot contestuali, il supporto della lingua.

Breve riepilogo

UI multi-lingue è un lavoro di sistema a livello di architettura, design, contenuti e diritti. Organizzate chiavi e folback, usate ICU e Intl, supportate RTL, controllate lo pseudolocale in anticipo e assicurate la correttezza legale delle frasi regionali. In questo modo il prodotto si sentirà familiare, dai coefficienti e pagamenti alle lettere e alla guida, in ogni paese e per ogni utente.

Contact

Mettiti in contatto

Scrivici per qualsiasi domanda o richiesta di supporto.Siamo sempre pronti ad aiutarti!

Avvia integrazione

L’Email è obbligatoria. Telegram o WhatsApp — opzionali.

Il tuo nome opzionale
Email opzionale
Oggetto opzionale
Messaggio opzionale
Telegram opzionale
@
Se indichi Telegram — ti risponderemo anche lì, oltre che via Email.
WhatsApp opzionale
Formato: +prefisso internazionale e numero (ad es. +39XXXXXXXXX).

Cliccando sul pulsante, acconsenti al trattamento dei dati.