我假設你使用的是ember-moment
addon;並已配置config/environment.js
與
moment: {
// This will output _all_ locale scripts to assets/moment-locales
localeOutputPath: 'assets/moment-locales'
},
正如您所提及的。
Ember.$.getScript('/assets/moment-locales/ru.js');
提供了一種在需要時動態加載時刻ru
區域設置的方法。這意味着您不需要將相關語言環境包含到應用程序的JavaScript文件中,而是希望在應用程序中的某些用戶請求中加載相關語言環境。通常最好在路由器的掛接方法(如beforeModel
或model
)內執行此類加載操作。
爲了從moment
獲得簡短的月份名稱;您通過
import moment from 'moment';
需要先進口ES6 moment
模塊,並與
moment.monthsShort()
至於我可以看到接入短月份名稱;您請求語言環境的方式存在問題,因此您收到了您提到的錯誤。我相信一個工作代碼是純文本更好的解釋;因此我創建了以下git repository以說明如何在路線中動態更改區域設置,以及如何顯示從moment
檢索到的短名稱。請通過克隆並在本地主機上運行來查看它。
在此存儲庫的應用程序中,application.hbs
包含指向5個子路徑的鏈接;每個顯示不同語言的月份短名稱。動態加載相關語言環境的技巧的代碼是routes/locale-route.js
文件的model
鉤子方法。如果區域設置已經加載(請注意,默認情況下,英文是moment
),它只是通過切換到目標區域設置(moment.locale(localeToLoad);
)返回月份的短名稱。否則,它會對服務器執行遠程調用,並等待響應(使用承諾)返回月份名稱。所有5種不同語言的路線都從這條基地路線延伸而來。一旦從服務器加載語言環境,您不再需要再次加載它,並且locale-route
已經按照我的解釋處理它。我希望有所幫助。
看完您的評論後,我更新了源代碼以包含ember-cli-mirage
。 Mirage是一款客戶端模擬服務器,用於開發,測試和原型化您的應用程序。一旦你將它作爲一個依賴包含它開始攔截你的遠程調用請求。因此,在你的情況下,海市蜃樓攔截要求相關區域設置的請求。你需要做的是通過海市蜃樓傳遞語言環境。爲了做到這一點,你需要添加以下
this.passthrough('/assets/moment-locales/**');
到mirage/config.js
讓海市蜃樓不會在運行要求苛刻的時刻,語言環境干擾。請參閱我提供的git存儲庫下的related file。這肯定會解決你的問題。
有什麼不清楚我的答案?請克隆我提供的源代碼,並在需要時提出進一步的問題。 – alptugd