2017-12-10 4 views
0

Ich habe eine Plugin-Bibliothek namens Aurelia-Slickgrid erstellt und ich bin dabei, i18n hinzuzufügen, um mehrere Gebietsschemas zu unterstützen. Ich habe alles in meiner eigenen Entwicklungsumgebung eingerichtet und funktioniert, aber sobald ich alles gebündelt habe und alles, wie wird der Benutzer das Gebietsschema verwenden, das ich erstellt habe (von node_modules/aurelia-slickgrid/locales)? Muss der Benutzer kopieren & fügen Sie die Schlüssel/Werte, die ich erstellt habe? Ich habe nur ein Dutzend Schlüssel oder so, nicht so große Sache, aber immer noch, ich würde sie lieber direkt verwenden.Wie unterstützt man mehrere i18n-Endpunkte in Aurelia?

Die aktuelle Setup, das ich habe, ist wie dies

import { I18N, TCustomAttribute } from 'aurelia-i18n'; 
import * as Backend from 'i18next-xhr-backend'; 

export function configure(aurelia: Aurelia) { 
    aurelia.use.plugin(PLATFORM.moduleName('aurelia-i18n'), (instance) => { 
    instance.i18next.use(Backend); 

    return instance.setup({ 
     backend: { 
     loadPath: './locales/{{lng}}.json', 
     }, 
     lng: 'en', 
     attributes: ['t', 'i18n'], 
     fallbackLng: 'en', 
     debug: false 
    }); 
    }); 
} 

Ich weiß, dass ich die {{ns}} im Spiel hinzufügen kann, aber ich glaube nicht, dass mir helfen. Das Problem besteht eher darin, wie kann ich einen weiteren Endpunkt hinzufügen? Wenn ich hinzufügen ns wie diese

loadPath: './locales/{{lng}}/{{ns}}.json', // <-- XHR settings for where to get the files from 

Es kommt nach wie vor aus dem gleichen Endpunkt. Die Frage ist also, wie mit mehreren Backend-Endpunkten/Pfaden umzugehen ist.

Antwort

1

In der Regel muss der Verbraucher Ihres Plugins seine App auch irgendwie bündeln. Es ist also definitiv nicht möglich, Referenzen auf node_modules zu haben, da diese Dateien beim Zugriff auf die prod-App nicht verfügbar sind, ohne dass ein node_modules-Ordner vorhanden ist.

Dieses Szenario entspricht ungefähr bootstrap and using their custom fonts (glyphicons). Sie würden sie an einen genau definierten Ort kopieren (in Ihrem Fall ./locales) und die Struktur beibehalten, wie sie ist. Sie können sie mit einer benutzerdefinierten ns platzieren, da dies genau der Grund ist, warum i18next mehrere Namespaces unterstützt. Ihr resultierendes Beispiel wäre also etwa:

./locales/en-US/aurelia-slickgrid.json 
./locales/de-DE/aurelia-slickgrid.json 
... 

Der Benutzer muss dann sicherstellen, dass diese Übersetzungen mit einem anderen Namespace konsumiert werden.

Mehrere Endpunkte werden von Standard-Übersetzungsladern nicht unterstützt (siehe here). Der Grund wäre, dass der Anwendungsfall zu spezifisch ist.

+0

Hmm ok, Sie sagen also, das ist wie ein Anlagenordner, der in einen zentralen Anlagenordner kopiert werden muss. Also muss ich eine copyFiles in meiner Webpack-Konfiguration verwenden. Ich habe nicht über diesen Ansatz nachgedacht, aber nach einer Bündelung macht es Sinn. Danke – ghiscoding

+0

Genau, es ist nur ein Asset-Artefakt. Das i18n-Plugin erweitert den Standard-NS selbst für das relative Zeit-Feature, um Standard-Übersetzungen bereitzustellen. Sehen Sie sich also dieses an, um eine Alternative zum Asset Copy Basta zu sehen – zewa666

Verwandte Themen