如果路由包含语言前缀,则为Controller加载其他视图(视图的动态加载)

问题描述 投票:0回答:1

我正在使用Dan Wahlin的AngularJS教程作为angular的种子项目。该代码可以在这里找到:https://github.com/DanWahlin/CustomerManager

我无法使它同时支持两种不同的语言。例如。当路由仅是/en/customers/customers时,我想显示customers.html文件夹中的/Views/视图,如果路由是/fr/customers,我要加载customers.html ng-view在/Views/fr目录中。问题是路由已在app.config中注册。一旦注册了路线,如何更改它们以使其适用于其他语言?

一旦加载了网站并向用户显示了主页,我就会看到一个链接,上面写着更改语言。单击链接后,我希望所有路由现在都具有/fr/routeName而不是/routeName。我怎样才能做到这一点。我将如何记住语言并将所有路由重新路由到/fr/routeName,而不仅仅是默认的/routeName。一旦用户单击更改语言按钮,我尝试使用$location.search('lang','fr')附加查询字符串值。但是每次单击链接时,查询字符串都会消失。另外,即使我有查询字符串,从现在开始我该如何告诉Angular,也要使用/View/fr作为Views的基本目录,而不是/Views,仅是因为queryString包含lang=fr

以前我以前使用Kendo的MVVM框架制作MVVM应用程序时,我曾经将fr视图以相同的名称放在/views/fr文件夹中,并将英语视图放在/Views目录中。然后,我在Viewmodel中检查,如果查询字符串包含fr,则从/View/fr文件夹编译fr模板,否则从/Views文件夹加载模板。

*这是app.js文件,其中包含app.config:app.js

*这是routeResolver服务,该服务具有硬编码视图的基本目录:routeResolver.js

简而言之:

[1)在用户单击链接或按钮后,如何存储用户选择的语言,querystring是否可行?还是可以将默认路由设置为从此以后针对每个请求从控制器指向/ fr?2)如果queryString包含lang = fr,我如何告诉angular路由到/ Views / fr而不是/ Views以获取fr View。

我是新手,对服务,工厂,提供者等非常困惑。服务在配置中不可用,我们必须使用提供程序,而我在运行块中没有提供程序,而必须使用服务。我要花点时间才能掌握它。我将不胜感激任何帮助。您可以参考Dan Wahlin的git hub项目,请告诉我如何更改它以响应其他语言。当前,View目录在routeResolver.js中被硬编码为var viewsDirectory = '/app/customersApp/views/',。一旦应用程序加载并且用户选择法语作为默认语言,如何在用户单击时使其变为/ views / fr。

angularjs mvvm multilingual angularjs-service angularjs-routing
1个回答
2
投票

我真的很喜欢国际化的角度翻译。它通过外部化字符串来工作,然后您只有一个视图,其中根据设置的语言替换了字符串。您应该检查一下:https://angular-translate.github.io/

© www.soinside.com 2019 - 2024. All rights reserved.