我正在尝试学习AngularJS和DjangoCMS,所以我一起创建了一个新项目。
状态
默认情况下,DjangoCMS使用第一个URL段来确定站点的语言(/ en /,/ fr /)。默认情况下,每个不包含语言段的URL都会重定向到/ en /。
这意味着,我的所有AngularJS ajax调用都需要发送到/ en / api /或/ fr / api /。
问题
我想使用第一段来确定Angular中用于国际化的语言。
还将全局第一段设置为我的AngularJS应用程序,因此我不需要在每次ajax调用时指定它。
可能的解决方案
我找到的一个解决方案是在Django端为每种语言使用不同的模板。
<base href="/en/">
标记中会有<head>
。<base href="/fr/">
标记中会有<head>
,我可以使用预先捆绑的规则集,也可以只将本地脚本添加到脚本列表(https://docs.angularjs.org/guide/i18n)。 我想这对更多语言也有用,但这意味着我必须为每种语言创建一个特定的模板和代码。
最佳解决方案?
我认为最好的方法是在Angular应用程序中定义一个逻辑,根据第一个url段加载语言脚本,并在应用程序中全局确定第一个段。我们将避免为每种语言编写代码。 这个解决方案可行吗?我在Angular上动态设置了一个基本网址,但我没有找到任何有趣的结果。
我不确定问题应该在StackOverflow上,但我真的不知道其他堆栈交换论坛。
谢谢!
答案 0 :(得分:0)
我会做这样的事情:
{% load i18n %}
并设置<base href="">
,如下所示:
{% get_current_language as LANGUAGE_CODE %}
<base href="/{{ LANGUAGE_CODE }}/" />
angular.module("myapp.services", [])
.config(["$provide", function ($provide) {
$provide.value("base", $("base").attr("href"));
}]);
并将其注入一个进行ajax调用的服务:
angular.module("myapp.services").factory("myService", ["base", function (base) {
var uri = base + "api/some_url";
...