1

現在選択されている言語をルートに保存する必要があります。

例:

/en/login
/en/welcome
/ru/register
....

ルートにいくつかのプレフィックスを設定する簡単な方法はありますか、または各ルートに lang を設定する必要がありますか?

主なアイデアは、次のようなテンプレートに書き込むことです

[linkTo]="/welcome"

しかし、その結果、ルーターには次のようなものがあります

/en/welcome

PS私はngrx/routerを使用しています

4

1 に答える 1

1

言語プレフィックスを格納する localStorage アイテムを作成します。
ルーターを拡張し、ナビゲート方法をオーバーライドします。
ルーターがナビゲートするように指示されたら、言語プレフィックスを挿入します。

ルーターを拡張するという考えが気に入らない場合は、ラッパーを作成し、代わりにラッパーを使用してください。

@Injectable()
export class MyRouter {
    constructor(private _router: Router){}

    navigate(url: string){
        var lang : string = localStorage.getItem("lang");
        this._router.navigate(["/"+lang+"/"+url]);
    }
}

アップデート

import { Router } from "@ngrx/router";
import { LocationStrategy } from "@angular/common";
import { Injectable } from "@angular/core";
@Injectable()
export class GlobalRouter extends Router {
    constructor(public platformStrategy: LocationStrategy) { // ANGULAR 2 DEPENDENCY INJECTOR SHOULD TAKE OVER
    // it's not working
        alert("constructor");
        super(platformStrategy);
    }

    normalize(url: string): string {
        let router = super.normalize(url);
        alert(`normalize router ${router}`);
        return router;
    }
}

bootstrap(AcademyApp, [
    HTTP_PROVIDERS,
    provideStore(reducer),
    runEffects(effects),
    connectRouterToStore(),
    provideRouter(routes),
    provideDB(schema),
    actions,
    services,
    provideForms(),
    disableDeprecatedForms(),
    FORM_PROVIDERS,
    {
        provide : Router,
        useClass: GlobalRouter
    }
])
于 2016-07-05T09:17:05.080 に答える