chroom.i18n

Beschrijving

Gebruik de chrome.i18n infrastructuur om internationalisering in uw hele app of extensie te implementeren.

Manifest

Als een extensie een map /_locales heeft, moet het manifest "default_locale" definiëren.

Concepten en gebruik

Je moet alle voor de gebruiker zichtbare tekstfragmenten in een bestand met de naam messages.json plaatsen. Telkens wanneer je een nieuwe taal toevoegt, maak je een bestand messages aan in een map met de naam /_locales/_localeCode_ , waarbij localeCode een code is, bijvoorbeeld en voor Engels.

Hier is de bestandsstructuur voor een geïnternationaliseerde extensie die Engels ( en ), Spaans ( es ) en Koreaans ( ko ) ondersteunt:

In de extensiemap: manifest.json, *.html, *.js, /_locales map. In de /_locales map: en, es en ko mappen, elk met een messages.json bestand.

Ondersteuning voor meerdere talen

Stel dat u een extensie hebt met de bestanden die in de volgende afbeelding worden weergegeven:

Een manifest.json-bestand en een JavaScript-bestand. Het .json-bestand bevat 'Hello World'. Het JavaScript-bestand heeft als titel 'Hello World'.

Om deze extensie te internationaliseren, geef je elke voor de gebruiker zichtbare tekenreeks een naam en plaats je deze in een berichtenbestand. Het manifest, de CSS-bestanden en de JavaScript-code van de extensie gebruiken de naam van elke tekenreeks om de gelokaliseerde versie ervan op te halen.

Zo ziet de extensie eruit wanneer deze geïnternationaliseerd is (merk op dat deze nog steeds alleen Engelse tekst bevat):

In het manifest.json-bestand is 'Hello World' gewijzigd in '__MSG_extName__', en een nieuw item 'default_locale' heeft de waarde 'en'. In het JavaScript-bestand is 'Hello World' gewijzigd in chrome.i18n.getMessage('extName'). Een nieuw bestand met de naam /_locales/en/messages.json definieert 'extName'.

Enkele opmerkingen over internationalisering:

  • Je kunt elke ondersteunde taalinstelling gebruiken. Als je een niet-ondersteunde taalinstelling gebruikt, negeert Google Chrome deze.
  • In manifest.json en CSS-bestanden kun je naar een tekenreeks met de naam messagename verwijzen, bijvoorbeeld zo:

    __MSG_messagename__
    
  • In de JavaScript-code van je extensie of app kun je naar een tekenreeks met de naam messagename verwijzen, bijvoorbeeld zo:

    chrome.i18n.getMessage("messagename")
    
  • Bij elke aanroep van getMessage() kunt u maximaal 9 tekenreeksen opgeven die in het bericht moeten worden opgenomen. Zie Voorbeelden: getMessage voor meer informatie.

  • Sommige berichten, zoals @@bidi_dir en @@ui_locale , worden door het internationaliseringssysteem geleverd. Zie de sectie 'Voorgedefinieerde berichten' voor een volledige lijst met voorgedefinieerde berichtnamen.

  • In messages.json heeft elke voor de gebruiker zichtbare tekenreeks een naam, een "message"-item en een optioneel "description"-item. De naam is een sleutel zoals "extName" of "search_string" die de tekenreeks identificeert. Het "message" specificeert de waarde van de tekenreeks in deze taal. De optionele "description" biedt hulp aan vertalers, die mogelijk niet kunnen zien hoe de tekenreeks in uw extensie wordt gebruikt. Bijvoorbeeld:

    {
      "search_string": {
        "message": "hello%20world",
        "description": "The string we search for. Put %20 between words that go together."
      },
      ...
    }
    

Voor meer informatie, zie Formaten: Taalspecifieke berichten .

Zodra een extensie is geïnternationaliseerd, is het vertalen ervan eenvoudig. Je kopieert messages.json , vertaalt het en plaatst de kopie in een nieuwe map onder /_locales . Om bijvoorbeeld Spaans te ondersteunen, plaats je een vertaalde kopie van messages.json in /_locales/es . De volgende afbeelding toont de vorige extensie met een nieuwe Spaanse vertaling.

Dit ziet er hetzelfde uit als de vorige afbeelding, maar met een nieuw bestand op /_locales/es/messages.json dat een Spaanse vertaling van de berichten bevat.

Voorgedefinieerde berichten

Het internationaliseringssysteem biedt een aantal vooraf gedefinieerde berichten om u te helpen bij het lokaliseren. Deze omvatten @@ui_locale , waarmee u de huidige UI-taal kunt detecteren, en een aantal @@bidi_... berichten waarmee u de tekstrichting kunt detecteren. Deze laatste berichten hebben vergelijkbare namen als constanten in de BIDI (bidirectionele) API van de gadgets .

Het speciale bericht @@extension_id kan worden gebruikt in CSS- en JavaScript-bestanden, ongeacht of de extensie of app gelokaliseerd is. Dit bericht werkt niet in manifestbestanden.

De volgende tabel beschrijft elk vooraf gedefinieerd bericht.

Berichtnaam Beschrijving
@@extension_id De extensie- of app-ID; u kunt deze tekenreeks gebruiken om URL's te construeren voor bronnen binnen de extensie. Zelfs niet-gelokaliseerde extensies kunnen dit bericht gebruiken.
Let op: dit bericht mag niet in een manifestbestand worden gebruikt.
@@ui_locale De huidige landinstelling; u kunt deze tekenreeks gebruiken om landinstelling-specifieke URL's te maken.
@@bidi_dir De tekstrichting voor de huidige landinstelling, ofwel "ltr" voor talen die van links naar rechts worden gelezen, zoals Engels, of "rtl" voor talen die van rechts naar links worden gelezen, zoals Arabisch.
@@bidi_reversed_dir Als @@bidi_dir "ltr" is, dan is dit "rtl"; anders is het "ltr".
@@bidi_start_edge Als @@bidi_dir "ltr" is, dan is dit "links"; anders is het "rechts".
@@bidi_end_edge Als @@bidi_dir "ltr" is, dan is dit "rechts"; anders is het "links".

Hier is een voorbeeld van het gebruik van @@extension_id in een CSS-bestand om een ​​URL samen te stellen:

body {
  background-image:url('chrome-extension://__MSG_@@extension_id__/background.png');
}

Als de extensie-ID abcdefghijklmnopqrstuvwxyzabcdef is, dan wordt de vetgedrukte regel in het vorige codefragment als volgt:

  background-image:url('chrome-extension://abcdefghijklmnopqrstuvwxyzabcdef/background.png');

Hier is een voorbeeld van het gebruik van @@bidi_* berichten in een CSS-bestand:

body {
  direction: __MSG_@@bidi_dir__;
}

div#header {
  margin-bottom: 1.05em;
  overflow: hidden;
  padding-bottom: 1.5em;
  padding-__MSG_@@bidi_start_edge__: 0;
  padding-__MSG_@@bidi_end_edge__: 1.5em;
  position: relative;
}

Voor talen die van links naar rechts worden geschreven, zoals het Engels, worden de vetgedrukte regels als volgt:

  dir: ltr;
  padding-left: 0;
  padding-right: 1.5em;

Locaties

Je kunt kiezen uit vele landinstellingen, waaronder enkele (zoals en ) die het mogelijk maken dat één vertaling meerdere varianten van een taal ondersteunt (zoals en_GB en en_US ).

Je kunt je extensie lokaliseren naar elke taal die wordt ondersteund door de Chrome Web Store. Als je taal hier niet wordt vermeld, kies dan het dichtstbijzijnde alternatief. Als de standaardtaal van je extensie bijvoorbeeld "de_CH" is, kies dan "de" in de Chrome Web Store.

Landcode Taal (regio)
ar Arabisch
am Amhaars
bg Bulgaars
bn Bengaals
ca Catalaans
cs Tsjechisch
da Deens
de Duits
el Grieks
en Engels
en_AU Engels (Australië)
en_GB Engels (Groot-Brittannië)
en_US Engels (VS)
es Spaans
es_419 Spaans (Latijns-Amerika en de Caraïben)
et Ests
fa Perzisch
fi Fins
fil Filipijns
fr Frans
gu Gujarati
he Hebreeuws
hi Hindi
hr Kroatisch
hu Hongaars
id Indonesisch
it Italiaans
ja Japanse
kn Kannada
ko Koreaans
lt Litouws
lv Lets
ml Malayalam
mr Marathi
ms Maleis
nl Nederlands
no Noors
pl Pools
pt_BR Portugees (Brazilië)
pt_PT Portugees (Portugal)
ro Roemeense
ru Russisch
sk Slowaaks
sl Sloveens
sr Servisch
sv Zweeds
sw Swahili
ta Tamil
te Telugu
th Thais
tr Turks
uk Oekraïens
vi Vietnamees
zh_CN Chinees (China)
zh_TW Chinees (Taiwan)

Zoek naar berichten

Je hoeft niet elke tekenreeks voor elke ondersteunde taal te definiëren. Zolang het messages.json bestand van de standaardtaal een waarde bevat voor elke tekenreeks, werkt je extensie of app, ongeacht hoe summier de vertaling is. Zo zoekt het extensiesysteem naar een bericht:

  1. Doorzoek het berichtenbestand (indien aanwezig) op de door de gebruiker ingestelde taal. Als de taalinstelling van Google Chrome bijvoorbeeld is ingesteld op Brits Engels ( en_GB ), zoekt het systeem eerst naar het bericht in /_locales/en_GB/messages.json . Als dat bestand bestaat en het bericht erin staat, hoeft het systeem niet verder te zoeken.
  2. Als de voorkeurstaal van de gebruiker een regio bevat (dat wil zeggen, de taalcode begint met een underscore: _), zoek dan in de taalcode zonder die regio. Als het bestand met berichten en_GB bijvoorbeeld niet bestaat of het bericht niet bevat, zoekt het systeem in het bestand met berichten in de en . Als dat bestand bestaat en het bericht erin staat, zoekt het systeem niet verder.
  3. Zoek in het berichtenbestand naar de standaardtaal. Als de "default_locale" van de extensie bijvoorbeeld is ingesteld op "es", en noch /_locales/en_GB/messages.json noch /_locales/en/messages.json het bericht bevat, gebruikt de extensie het bericht uit /_locales/es/messages.json .

In de volgende afbeelding is de boodschap met de naam "colores" te zien in alle drie de talen die de extensie ondersteunt, maar "extName" is slechts in twee van de talen te zien. Waar een gebruiker van Google Chrome in Amerikaans Engels de tekst "Colors" ziet, ziet een gebruiker van Brits Engels "Colours". Zowel gebruikers van Amerikaans als Brits Engels zien de extensienaam "Hello World". Omdat de standaardtaal Spaans is, zien gebruikers van Google Chrome in een andere taal dan Engels de tekst "Colores" en de extensienaam "Hola mundo".

Vier bestanden: manifest.json en drie messages.json-bestanden (voor es, en en en_GB). De es- en en-bestanden bevatten vermeldingen voor berichten met de namen 'extName' en 'colores'; het en_GB-bestand bevat slechts één vermelding (voor 'colores').

Stel de landinstellingen van uw browser in.

Om vertalingen te testen, kunt u de landinstellingen van uw browser aanpassen. In dit gedeelte wordt uitgelegd hoe u de landinstellingen kunt wijzigen in Windows , macOS , Linux en ChromeOS .

Windows

Je kunt de taalinstelling wijzigen met behulp van een taalspecifieke sneltoets of via de gebruikersinterface van Google Chrome. Eenmaal ingesteld, is de sneltoetsmethode sneller en kun je hiermee meerdere talen tegelijk gebruiken.

Gebruik een taalspecifieke sneltoets.

Om een ​​snelkoppeling te maken en te gebruiken waarmee Google Chrome met een specifieke taalinstelling wordt gestart:

  1. Maak een kopie van de Google Chrome-snelkoppeling die al op je bureaublad staat.
  2. Hernoem de nieuwe snelkoppeling zodat deze overeenkomt met de nieuwe landinstellingen.
  3. Wijzig de eigenschappen van de snelkoppeling zodat het veld 'Doel' de vlaggen --lang en --user-data-dir bevat. Het doel zou er ongeveer zo uit moeten zien:

    path_to_chrome.exe --lang=locale --user-data-dir=c:\locale_profile_dir
    
  4. Start Google Chrome door dubbel te klikken op de snelkoppeling.

Om bijvoorbeeld een snelkoppeling te maken die Google Chrome in het Spaans ( es ) start, kunt u een snelkoppeling maken met de naam chrome-es met het volgende doel:

path_to_chrome.exe --lang=es --user-data-dir=c:\chrome-profile-es

Je kunt zoveel snelkoppelingen maken als je wilt, waardoor het testen in meerdere talen heel eenvoudig wordt. Bijvoorbeeld:

path_to_chrome.exe --lang=en --user-data-dir=c:\chrome-profile-en
path_to_chrome.exe --lang=en_GB --user-data-dir=c:\chrome-profile-en_GB
path_to_chrome.exe --lang=ko --user-data-dir=c:\chrome-profile-ko
Gebruik de gebruikersinterface

Zo wijzig je de landinstellingen via de gebruikersinterface van Google Chrome voor Windows:

  1. App-pictogram > Opties
  2. Selecteer het tabblad 'Onder de motorkap'.
  3. Scroll naar de webinhoud
  4. Klik op Lettertype- en taalinstellingen wijzigen.
  5. Selecteer het tabblad Talen.
  6. Gebruik het keuzemenu om de taal van Google Chrome in te stellen.
  7. Chrome opnieuw opstarten

Mac OS

Om de landinstellingen op een Mac te wijzigen, ga je naar de systeemvoorkeuren.

  1. Kies in het Apple-menu ' Systeemvoorkeuren' .
  2. Kies onder het gedeelte 'Persoonlijk' voor 'Internationaal' .
  3. Kies uw taal en locatie.
  4. Chrome opnieuw opstarten

Linux

Om de landinstellingen op Linux te wijzigen, sluit je eerst Google Chrome af. Stel vervolgens in één regel de omgevingsvariabele LANGUAGE in en start Google Chrome opnieuw. Bijvoorbeeld:

LANGUAGE=es ./chrome

ChromeOS

Om de landinstellingen in ChromeOS te wijzigen:

  1. Kies in het systeemvak ' Instellingen' .
  2. Selecteer in het gedeelte 'Talen en invoer' de optie 'Taal' in het vervolgkeuzemenu.
  3. Als uw taal niet in de lijst staat, klik dan op 'Talen toevoegen' en voeg deze toe.
  4. Nadat je de taal hebt toegevoegd, klik je op het menu-item met de drie puntjes (Meer acties) naast je taal en kies je 'ChromeOS in deze taal weergeven' .
  5. Klik op de knop 'Opnieuw opstarten ' naast de taalinstelling om ChromeOS opnieuw op te starten.

Voorbeelden

Voorbeelden van internationalisering vindt u in de map examples/api/i18n . Voor een volledig voorbeeld, zie examples/extensions/news . Voor andere voorbeelden en hulp bij het bekijken van de broncode, zie Samples .

getMessage()

De volgende code haalt een gelokaliseerd bericht uit de browser en geeft dit weer als een tekenreeks. Twee plaatsaanduidingen in het bericht worden vervangen door de tekenreeksen "string1" en "string2".

function getMessage() {
  var message = chrome.i18n.getMessage("click_here", ["string1", "string2"]);
  document.getElementById("languageSpan").innerHTML = message;
}

Zo lever je een enkele string aan en gebruik je die:

  // In JavaScript code
  status.innerText = chrome.i18n.getMessage("error", errorDetails);
"error": {
  "message": "Error: $details$",
  "description": "Generic error template. Expects error parameter to be passed in.",
  "placeholders": {
    "details": {
      "content": "$1",
      "example": "Failed to fetch RSS feed."
    }
  }
}

Voor meer informatie over plaatsaanduidingen, zie de pagina Taalspecifieke berichten . Voor details over het aanroepen van getMessage() , zie de API-referentie .

getAcceptLanguages()

De volgende code haalt de geaccepteerde talen op uit de browser en geeft deze weer als een tekenreeks, waarbij elke geaccepteerde taal wordt gescheiden door een komma.

function getAcceptLanguages() {
  chrome.i18n.getAcceptLanguages(function(languageList) {
    var languages = languageList.join(",");
    document.getElementById("languageSpan").innerHTML = languages;
  })
}

Voor meer informatie over het aanroepen van getAcceptLanguages() , zie de API-referentie .

detectLanguage()

De volgende code detecteert maximaal 3 talen in de gegeven tekenreeks en geeft het resultaat weer als tekenreeksen, gescheiden door nieuwe regels.

function detectLanguage(inputText) {
  chrome.i18n.detectLanguage(inputText, function(result) {
    var outputLang = "Detected Language: ";
    var outputPercent = "Language Percentage: ";
    for(i = 0; i < result.languages.length; i++) {
      outputLang += result.languages[i].language + " ";
      outputPercent +=result.languages[i].percentage + " ";
    }
    document.getElementById("languageSpan").innerHTML = outputLang + "\n" + outputPercent + "\nReliable: " + result.isReliable;
  });
}

Voor meer informatie over het aanroepen van detectLanguage(inputText) , zie de API-referentie .

Soorten

LanguageCode

Chrome 47+

Een ISO-taalcode zoals en of fr . Voor een volledige lijst van talen die door deze methode worden ondersteund, zie kLanguageInfoTable . Voor een onbekende taal wordt und geretourneerd, wat betekent dat [percentage] van de tekst onbekend is voor CLD.

Type

snaar

Methoden

detectLanguage()

Chrome 47+
chrome.i18n.detectLanguage(
  text: string,
)
: Promise<object>

Detecteert de taal van de aangeleverde tekst met behulp van CLD.

Parameters

  • tekst

    snaar

    De gebruiker voert een tekenreeks in die vertaald moet worden.

Retourneert

  • Promise<object>

    Chrome 99+

getAcceptLanguages()

chrome.i18n.getAcceptLanguages(): Promise<LanguageCode[]>

Hiermee worden de geaccepteerde talen van de browser opgehaald. Dit is iets anders dan de landinstellingen die door de browser worden gebruikt; om de landinstellingen te verkrijgen, gebruikt u i18n.getUILanguage .

Retourneert

getMessage()

chrome.i18n.getMessage(
  messageName: string,
  substitutions?: any,
  options?: object,
)
: string

Haalt de gelokaliseerde tekenreeks op voor het opgegeven bericht. Als het bericht ontbreekt, retourneert deze methode een lege tekenreeks (''). Als de opmaak van de getMessage() aanroep onjuist is — bijvoorbeeld als messageName geen tekenreeks is of als de substitutie- array meer dan 9 elementen bevat — retourneert deze methode undefined .

Parameters

  • berichtnaam

    snaar

    De naam van het bericht, zoals gespecificeerd in het bestand messages.json .

  • vervangingen

    eventuele optionele

    Maximaal 9 vervangende tekenreeksen, indien het bericht dit vereist.

  • opties

    object optioneel

    Chrome 79+
    • ontsnappingsLt

      boolean optioneel

      Ontsnap aan < in vertaling naar &lt; . Dit geldt alleen voor het bericht zelf, niet voor de plaatsaanduidingen. Ontwikkelaars kunnen dit gebruiken als de vertaling in een HTML-context wordt gebruikt. Closure Templates die met Closure Compiler worden gebruikt, genereren dit automatisch.

Retourneert

  • snaar

    Bericht aangepast aan de huidige taalinstellingen.

getUILanguage()

chrome.i18n.getUILanguage(): string

Hiermee wordt de UI-taal van de browser opgehaald. Dit is anders dan i18n.getAcceptLanguages , waarmee de voorkeurstalen van de gebruiker worden geretourneerd.

Retourneert

  • snaar

    De taalcode van de browserinterface, zoals en-US of fr-FR.