Überschreibungen der Internationalisierung (i18n) konfigurieren

Mit Internationalisierungs-Rewrites („i18n-Rewrites“) können Sie je nach Land oder bevorzugter Sprache des Nutzers unterschiedliche Inhalte bereitstellen. Hier sind einige Beispielkonfigurationen, die Sie einrichten können:

  • Allen Nutzern, die Französisch bevorzugen, denselben französischen Inhalt bereitstellen (unabhängig vom Land)
    Beispiel: eine Startseite mit französischem Text

  • Nutzern, die Französisch bevorzugen, Standardfranzösisch bereitstellen, aber kanadischen Nutzern, die Französisch bevorzugen, stattdessen kanadisches Französisch bereitstellen.
    Beispiel: eine Startseite mit Standardfranzösisch im Vergleich zu einer Startseite mit kanadischem Französisch

  • Allen kanadischen Nutzern denselben Inhalt bereitstellen (unabhängig von ihrer bevorzugten Sprache)
    Beispiel: eine Startseite mit der „Standardsprache“ Ihrer Website, aber mit einer kanadaspezifischen Funktion (z. B. einem Feiertagsthema)

  • Kanadischen Nutzern, die Französisch bevorzugen, kanadisches Französisch bereitstellen
    Beispiel: eine Startseite mit kanadischem Französisch und einer kanadaspezifischen Funktion (z. B. einem Feiertagsthema)

Firebase Hosting ermittelt das Land eines Nutzers anhand seiner IP-Adresse und die Spracheinstellungen eines Nutzers anhand des Accept-Language Anfrageheaders (der in der Regel automatisch von seinem Webbrowser festgelegt wird).

i18n-Rewrites einrichten

Wenn Sie i18n-Rewrites für Ihre Hosting Website einrichten möchten, müssen Sie ein Verzeichnis für "i18n Inhalte" für alle lokalisierten Inhalte erstellen und dann das Attribut i18n zu Ihrer firebase.json Datei hinzufügen, um auf das neue Verzeichnis für "i18n-Inhalte" zu verweisen.

Hier sind die detaillierten Schritte:

  1. Erstellen Sie im Ordner public Ihres lokalen App-Verzeichnisses ein separates Verzeichnis für Ihre „i18n-Inhalte“ und dann Unterordner für jede Sprach- und Länderkombination, die von Ihrer Website unterstützt wird.

    Fügen Sie in jedem Unterordner die für diese Kombination spezifischen Inhalte hinzu, z. B. Startseiten mit Feiertagsthema oder sprachspezifische 404-Seiten.

    Hier ist ein Beispiel für ein Verzeichnis für „i18n-Inhalte“ mit dem Namen localized-files:

    public/
        index.html  // your site's default homepage
        404.html  // your site's custom 404 page
    
        localized-files/
            ALL_ca/
                index.html
            es_ALL/
                index.html
                404.html
            fr/
                index.html
                404.html
            fr_ca/
                index.html

    Das Verzeichnis localized-files/ enthält separate Unterordner für jede Sprach- und Länderkombination, die von Ihrer Website unterstützt wird. Das Benennungsmuster für jeden Unterordner muss eines der folgenden Formate haben:

    • languageCode_countryCode: Enthält Inhalte, die für Nutzer mit dieser bevorzugten Sprache und diesem Ländercode spezifisch sind

    • languageCode: Enthält Inhalte, die für Nutzer mit dieser bevorzugten Sprache spezifisch sind, aber die Inhalte sind nicht länderspezifisch. Entspricht im Grunde languageCode_ALL

    Weitere Informationen zu diesen Codes finden Sie im Unterabschnitt Länder- und Sprachcodes unten. Sie können den Wert ALL (Groß-/Kleinschreibung beachten) verwenden, um ein beliebiges Land (z. B. es_ALL/) oder eine beliebige Sprache (z. B. ALL_ca/) anzugeben.

    Die Dateien in einem Unterordner müssen keine entsprechenden Dateien im Verzeichnis public oder in anderen Unterordnern haben. Sie können Inhalte erstellen, die vollständig auf eine Sprache und/oder ein Land zugeschnitten sind.

  2. Fügen Sie das Attribut i18n zu Ihrer firebase.json-Datei hinzu und geben Sie das Verzeichnis an, das Ihre „i18n-Inhalte“ enthält. Fahren wir mit unserem Beispiel fort:

    // firebase.json
    
    "hosting": {
    
      "public": "public",
    
      "ignore": [
        "firebase.json",
        "**/.*",
        "**/node_modules/**"
      ],
    
      "i18n": {
        "root": "/localized-files"  // directory that contains your "i18n content"
      }
    
      ...
    }

    Das für root angegebene Verzeichnis muss der Name des Verzeichnisses sein, das alle Ihre Unterordner für „i18n-Inhalte“ enthält. Wenn Sie alle Ihre Unterordner für „i18n-Inhalte“ im Stammverzeichnis Ihres public Verzeichnisses platziert haben, verwenden Sie / für den Wert von root. Führende und nachgestellte Schrägstriche im Wert von root sind optional.

  3. Stellen Sie Ihre „i18n-Inhalte“ und die Konfiguration auf Ihrer Hosting Website bereit.

Sie können Ihre Einrichtung mit Cookie-Überschreibungen testen.

Länder- und Sprachcodes

Beim Benennen von Unterordnern für „i18n-Inhalte“ müssen Sie sowohl für Länder- als auch für Sprachcodes Kleinbuchstaben verwenden. Sie können den Wert ALL (Groß-/Kleinschreibung beachten) verwenden, um ein beliebiges Land (z. B. es_ALL/) oder eine beliebige Sprache (z. B. ALL_ca/) anzugeben.

Hosting ruft den Ländercode aus der IP-Adresse des Nutzers ab. Ländercodes sind zweistellige ISO 3166-1-Alpha-2-Codes.

Die Sprachcodes werden aus dem Accept-Language Anfrageheader des Nutzers abgerufen (der in der Regel automatisch von seinem Webbrowser festgelegt wird). Es handelt sich um ISO 639-1-Codes. Beachten Sie bei der Verwendung von Sprachcodes Folgendes:

  • Wenn Hosting sucht, welche "i18n content" bereitgestellt werden sollen, werden die Sprachen anhand der Qualitätswerte im Accept-Language Header sortiert.

  • Hosting entfernt alle regionalen und länderspezifischen Untertags im Accept-Language Header. Daher darf der Sprachcode in einem Unterordnernamen für „i18n-Inhalte“ diese Untertags nicht enthalten. Sie können beispielsweise nicht es-419 oder es-US als Sprachcode in einem Unterordnernamen verwenden, aber es.

    Wenn Sie bestimmte regionale oder länderspezifische Inhalte bereitstellen möchten, können Sie Unterordner erstellen, die die gewünschten sprach- und länderspezifischen Inhalte enthalten.

Priorität für „i18n-Inhalte“

Wenn Sie i18n-Rewrites einrichten, stellt Hosting Inhalte in der folgenden Reihenfolge der Priorität bereit:

  1. Reservierte Namespaces, die mit einem /__/*-Pfadsegment beginnen

  2. Konfigurierte Weiterleitungen

  3. Statische Inhalte mit genauer Übereinstimmung

    1. Sprachcode + Ländercode (z. B. Inhalte aus fr_ca/)
      Die Reihenfolge richtet sich nach den Qualitätswerten für jede Sprache im Accept-Language Header der Anfrage.

    2. Nur Ländercode (z. B. Inhalte aus ALL_ca/)

    3. Nur Sprachcode (z. B. Inhalte aus fr/ oder es_ALL/)
      Die Reihenfolge richtet sich nach den Qualitätswerten für jede Sprache im Accept-Language Header der Anfrage.

    4. Statische Inhalte mit genauer Übereinstimmung (Standard)
      Diese Inhalte befinden sich außerhalb des Verzeichnisses für „i18n-Inhalte“, z. B. im Stammverzeichnis von public directory.

  4. Konfigurierte Rewrites

  5. 404-Fehlerbehandlung

    1. i18n-404-Seiten
      Hier gilt dieselbe Priorität wie oben für statische Inhalte mit genauer Übereinstimmung.

    2. Benutzerdefinierte 404 Seite

    3. Standardmäßige 404-Seite (von Firebase bereitgestellt)

Beispiel für die Priorität

Fahren wir mit unserem Beispiel von oben fort. Wir verwenden dasselbe Beispielverzeichnis und eine Beispielanfrage.

  • Beispiel für ein lokales Projektverzeichnis mit einem Verzeichnis für „i18n-Inhalte“ (mit dem Namen localized-files)

    public/
        index.html  // your site's default homepage
        404.html  // your site's custom 404 page
    
        localized-files/
            ALL_ca/
                index.html
            es_ALL/
                index.html
                404.html
            fr/
                index.html
                404.html
            fr_ca/
                index.html
  • Beispiel für Anfrageinformationen

    • Sprachcodes: fr, en (Französisch, dann Englisch)
      Die Sprachcodes werden anhand der Qualitätswerte im Accept-Language Header sortiert.

    • Ländercode: ca (Kanada)

Gemäß der Priorität für genaue Übereinstimmungen und den Qualitätswerten für die bevorzugten Sprachen durchsucht Hosting die Verzeichnisse in der folgenden Reihenfolge nach einer angeforderten Seite.

  1. public/localized-files/fr_ca/

  2. public/localized-files/en_ca/

  3. public/localized-files/ALL_ca/

  4. public/localized-files/fr_ALL/

  5. public/localized-files/fr/

  6. public/localized-files/en_ALL/

  7. public/localized-files/en/

  8. public/

  9. 404-Fehlerbehandlung

Welche Seite wird dem Nutzer bereitgestellt?

  • Angeforderte Seite: index.html

  • Angeforderte Seite: awesome-page.html

Beachten Sie bei dieser Suche und Bereitstellung des Verzeichnisses für „i18n-Inhalte“ Folgendes:

  • Das Verzeichnis localized-files/ enthält keine Unterordner en_ca/, en_ALL/ oder en/. Daher überspringt Hosting die Prioritätsliste, bis ein passender Unterordner für die Sprach- und Länderkombination der Anfrage gefunden wird.

  • Obwohl das Verzeichnis localized-files/ einen es_ALL/ Unterordner enthält, enthält die obige Anfrage keinen es oder es-foo Sprachcode. Daher sucht Hosting nicht nach „i18n-Inhalten“, die mit es übereinstimmen.

  • Unterordner mit dem Namen fr/ und fr_ALL/ sind aus Sicht der Sprach- und Ländereinstellungen eines Nutzers gleichwertig. Wenn jedoch beide Unterordner vorhanden sind, stellt Hosting Inhalte aus fr_ALL/ vor Inhalten aus fr/ bereit.

Sie können ändern, welche Inhalte bereitgestellt werden, indem Sie mit Cookies die Länder- und Sprachheader überschreiben.

Hier sind einige Möglichkeiten, Cookie-Überschreibungen zu verwenden:

  • Testen Sie eine Funktion mit verschiedenen Sprach-/Länderkombinationen, um zu prüfen, welche Inhalte bereitgestellt werden.

  • Ermöglichen Sie Ihren Nutzern, die angezeigten Inhalte zu ändern. Sie können beispielsweise eine Sprachauswahl implementieren und dann das firebase-language-override-Cookie des Nutzers entsprechend festlegen.

Wenn Sie Cookie-Überschreibungen konfigurieren möchten, legen Sie Cookies mit einem oder beiden der folgenden Namen fest: firebase-country-override und firebase-language-override. Das folgende JavaScript-Code-Snippet überschreibt beispielsweise den Ländercode mit ca und den Accept-Language-Header mit fr,en:

document.cookie = "firebase-country-override=ca";
document.cookie = "firebase-language-override=fr,en";

Sprach-Cookie-Überschreibungen müssen eine durch Kommas getrennte Liste von Sprachcodes in der Reihenfolge der Präferenz sein, ohne Untertags oder Qualitätswerte.

Cookie-Überschreibungen werden nicht in Logs berücksichtigt.