我需要在短时间内改变。 但我不能这样做。 我试着设置
localeOutputPath: 'assets/moment-locales'
并致电
Ember.$.getScript('/assets/moment-locales/ru.js');
在这种情况下,我有ember-mirage错误
Your Ember app tried to GET '/assets/moment-locales/ru.js?_=1490191145335',
but there was no route defined to handle this request. Define a route that
matches this path in your mirage/config.js file
暂时设置短月份名称的简单方法是什么?
答案 0 :(得分:0)
我假设您正在使用ember-moment
插件;并已使用
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
获取短月份名称;您需要先通过
moment
模块
import moment from 'moment';
并使用
访问短月份名称moment.monthsShort()
据我所见;您请求语言环境的方式存在问题,因此您收到了您提到的错误。我相信工作代码是纯文本的更好解释;因此,我创建了以下git repository来说明如何在路径中动态更改语言环境以及如何显示从moment
检索的短名称。请通过克隆并在您的localhost中运行来查看它。
在此存储库的应用程序中,application.hbs
包含指向5个子路由的链接;每个都用不同的语言显示月份的简短名称。执行动态加载相关区域设置技巧的代码位于routes/locale-route.js
文件的model
钩子方法中。如果已加载语言环境(请注意,默认情况下包含英语moment
),它只需通过切换到目标语言环境(moment.locale(localeToLoad);
)返回月份的短名称。否则,它会对服务器执行远程调用,并等待响应(通过使用promise)返回月份名称。 5种不同语言的所有路线均从此基本路线延伸。一次,从服务器加载语言环境;您不再需要再次加载它,locale-route
已按照我的解释处理它。我希望有所帮助。
阅读你的评论后;我更新了源代码以包含ember-cli-mirage
。 Mirage是一个客户端模拟服务器,用于开发,测试和原型化您的应用程序。将其作为依赖项包含后,它将开始拦截您的远程调用请求。因此,在您的情况下,海市蜃楼会截获要求相关区域设置的请求。你需要做的是通过海市蜃楼为区域设置。为此,您需要添加以下内容
this.passthrough('/assets/moment-locales/**');
到mirage/config.js
,以便海市蜃楼不会干扰运行时的苛刻时刻区域设置。请参阅我提供的git存储库下的related file。这肯定会解决您的问题。