1

我想學習AngularJS和DjangoCMS,所以我創建了一個新的項目,一起使用它們。如何處理DjangoCMS i18n網址(/ en/my_page,/ fr/my_page ...)和AngularJS?

狀態

默認情況下,DjangoCMS使用第一個URL段,以確定該網站的語言(/ EN /,/ FR /)。每個不包含語言片段的網址默認會被重定向到/ zh /。

這意味着,我所有的AngularJS ajax調用都需要指向/ en/api /或/ fr/api /。

問題

  1. 我想利用這個第一段,以確定國際化角度的語言。

  2. 還將全局第一段設置爲我的AngularJS應用程序,所以我不需要在每個ajax調用中指定它。

問題解決

一個解決方案,我發現是使用不同的模板Django上側每種語言。

  • 英文模板<base href="/en/">標記爲<head>
  • 法國模板<base href="/fr/">標記爲<head>,我可以使用預先捆綁的規則集或簡單地將本地腳本添加到腳本列表(https://docs.angularjs.org/guide/i18n)。

我想這也適用於更多的語言,但這意味着我必須爲每種語言創建特定的模板和代碼。

最佳解決方案?

我認爲最好的做法是在Angular應用程序中定義一個邏輯,根據第一個網址段加載語言腳本,並在應用程序中確定全局第一個段。我們將避免爲每種語言編寫代碼。 該解決方案可能嗎?我在Angular上動態地設置了一個基礎URL,但我沒有找到任何有趣的結果。

我不確定這個問題應該在StackOverflow上,但我並不真正瞭解其他堆棧交換論壇。

謝謝!

回答

0

我會做這樣的事情:

  1. 負載國際化的模板標籤:{% load i18n %}並設置<base href="">這樣的: {% get_current_language as LANGUAGE_CODE %} <base href="/{{ LANGUAGE_CODE }}/" />
  2. 當你有基礎設置像上面,你可以使用$提供獲得href值並將其暴露給服務和指令。例如: 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"; ...
+0

感謝您的回答。實際上,當設置'時,該應用將執行的每個調用都會自動設置該基地。所以不需要手動添加它。您的解決方案几乎是我對我的應用程序做的,但這是正常工作:) – Link14