gpt4 book ai didi

javascript - 如何处理 DjangoCMS i18n URL (/en/my_page,/fr/my_page...) 和 AngularJS?

转载 作者:行者123 更新时间:2023-11-28 06:21:17 26 4
gpt4 key购买 nike

我正在尝试学习 AngularJS 和 DjangoCMS,因此我创建了一个将它们一起使用的新项目。

状态

默认情况下,DjangoCMS 使用第一个 URL 段来确定站点的语言(/en/、/fr/)。默认情况下,每个不包含语言段的 URL 都会重定向到/en/。

这意味着,我所有的 AngularJS ajax 调用都需要发送至/en/api/或/fr/api/。

问题

  1. 我想使用第一段来确定 Angular 中用于国际化的语言。

  2. 并且还将第一个段全局设置到我的 AngularJS 应用程序,这样我就不需要在每个 ajax 调用上指定它。

可能的解决方案

我发现的一个解决方案是在 Django 端为每种语言使用不同的模板。

  • 英文模板将有 <base href="/en/"><head>标签。
  • 法语模板将有 <base href="/fr/"><head>标记,我可以使用预捆绑的规则集,也可以简单地将本地脚本添加到脚本列表 ( https://docs.angularjs.org/guide/i18n )。

我想这也适用于更多语言,但这意味着我必须为每种语言创建特定的模板和代码。

最佳解决方案?

我认为最好的办法是在 Angular 应用程序中定义一个逻辑,根据第一个 url 段加载语言脚本,并在应用程序中全局确定第一个段。我们将避免为每种语言编写代码。 该解决方案可行吗?我搜索了在 Angular 上动态设置基本 url,但没有找到任何有趣的结果。

我不确定这个问题应该出现在 StackOverflow 上,但我不太了解其他堆栈交换论坛。

谢谢!

最佳答案

我会做这样的事情:

  1. 加载 i18n 模板标签:{% load i18n %}并设置<base href="">像这样:
    {% get_current_language as LANGUAGE_CODE %}
    <base href="/{{ LANGUAGE_CODE }}/" />
  2. 当你有像上面这样的基本设置时,你可以使用 $provide in 来获取 href 值并将其公开给服务和指令。例如:
    angular.module("myapp.services", [])
    .config(["$provide", function ($provide) {
    $provide.value("base", $("base").attr("href"));
    }]);
    并将其注入(inject)到进行 ajax 调用的服务中:
    angular.module("myapp.services").factory("myService", ["base", function (base) {
    var uri = base + "api/some_url";
    ...

关于javascript - 如何处理 DjangoCMS i18n URL (/en/my_page,/fr/my_page...) 和 AngularJS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35512561/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com