首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ember:模板中的动态语言。使用LanguageController?

ember:模板中的动态语言。使用LanguageController?
EN

Stack Overflow用户
提问于 2015-09-02 10:20:40
回答 2查看 150关注 0票数 1

我有一个ember应用程序写在1.0之前的ember。我想在Ember2.0中重写这个应用。

在旧的代码库中,我有一个LanguageController,它具有所有语言字符串的英语定义,并且我有一个ajax调用,用来自另一种语言的字符串填充语言控制器。然后,我将该控制器作为全局变量在所有模板中可用。ember 2.0模板可能如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<label id="lblHomeNextAppointment">{{EEA.lang.home_next_appointment}}</label>
    <div class="appointment">
        {{model.nextAppointment.formattedDate}}
        {{model.nextAppointment.title}}
    </div>

我想把动态语言字符串放在它表示EEA.lang.home_next_appointment的地方。

如何构造控制器等来实现这一点?也许使用一种服务?控制器和服务之间的根本区别是什么?

旧的(1.0版本之前)控制器如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
EEA.LanguageController = Ember.ArrayController.extend({
    // Default values for language strings
    "header_progress": 'Progress',
    "header_planned": 'Planned',
    "home_next_appointment": "Next Appointment",
...
    init: function() {
        this._super();
        EEA.lang = this;  // Shorter to write EEA.lang, than EEA.router.languageController
    },
...
EN

回答 2

Stack Overflow用户

发布于 2015-09-02 13:52:32

你应该使用库来实现国际化。Ember-I18n做的就是你想要的。

在您的模板中,您可以使用{{t}} helper:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<label id="lblHomeNextAppointment">{{t 'lang.home_next_appointment'}}</label>

你只需要file with translations

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export default {
  lang: {
    'home_next_appointment': 'whatever'
  }
};

我有一个ajax调用,用另一种语言的字符串填充语言控制器。

使用Ember-I18n,您可以使用define translations at runtime

例如,您可以在application路由的beforeModel()钩子中设置所需翻译的动态加载:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
i18n: Ember.inject.service(),

beforeModel() {
    let lang = $.cookie('user-lang');
    if (!lang) {
      lang = 'pl';
    }

    this.set('lang', lang);

    Ember.$.getJSON('/translations/' + lang + '.json', (json) => {
      this.get('i18n').addTranslations(lang, json);
    });
},

当然,使用上面的方法,您需要在公共translations URL路径下有.json转换文件。

票数 2
EN

Stack Overflow用户

发布于 2015-09-02 14:09:52

解决这个问题的方法很少,但是在我看来最好使用Ember.Service()来解决这个问题,例如通过创建Translator服务(参见Service Guide)。我将使用以下论点来解释这一点:

  • 您可以将Translator服务从应用程序中分离出来,并在另一个
  • 中使用您可以在需要时按需连接此类服务(组件、控制器、其他服务等)
  • 如果需要,您可以使用object initializer在全局加载此类服务
  • 而您仍然可以这样做,将Route与控制器耦合将不再需要

在这种情况下,您可以这样做:

翻译器服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export default Ember.Service.extend({
  lang: 't1', // For reference
  current: {},
  init: function() {
    this.current = this.translations[this.lang];
  },
  changeLanguage: function(lang) {
    this.set('lang', lang);
    this.set('current', this.translations[lang]);
  },
  translations: {
    t1: {a: 'T1:A', b: 'T1:B'},
    t2: {a: 'T2:A', b: 'T2:B'}
  }
});

注入控制器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export default Ember.Controller.extend({
  translator: Ember.inject.service()
});

和模板中的用法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<p>{{translator.current.a}}</p>

参见full gistlive example

显然,人们可以做得更好,例如,通过拆分成Translator (用于设置/配置)和Dictionary (用于公开选定的语言翻译),这样模板的使用将类似于{{Dictionary.index.greeting}},但它显示了解决问题的基于服务的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32350548

复制
相关文章
遇到的各种时间类型:UTC时间、GMT时间、本地时间、Unix时间戳
GMT,即格林尼治标准时间,也就是世界时。GMT的正午是指当太阳横穿格林尼治子午线(本初子午线)时的时间。但由于地球自转不均匀不规则,导致GMT不精确,现在已经不再作为世界标准时间使用。
陈大剩博客
2023/02/17
3.4K0
遇到的各种时间类型:UTC时间、GMT时间、本地时间、Unix时间戳
在ASP中实现UNIX时间戳
  在康盛创想发布UC以后,我曾经尝试为其编写ASP把版本的客户端类库,过程中发现了几个问题,首当其冲的当然是服务器端不支持非php平台的接口,这个问题直接导致了我选择另起炉灶开发自己的通用用户中心。   但是在研究UC的过程中却也有一些细小的收获。这篇文章说说PHP中的时间戳。在PHP中,时间函数time()获得的不是我们在ASP中的事件函数Now()所返回的“2008-06-04 21:19:41”这样的形式,而是“1123495443”这样的形式。这个记录的是所表示的时间与1970年1月1日午夜零点之
小李刀刀
2018/03/02
3.2K0
Unix 时间戳;时间戳获取和生成
Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。
西湖醋鱼
2020/12/30
9.2K0
在线Unix时间戳转换,在编程语言中获取Unix时间戳:
在线Unix时间戳转换工具: https://oktools.net/timestamp 语言 秒 毫秒 JavaScript Math.round(new Date() / 1000) new Date().getTime() Java System.currentTimeMillis() / 1000 System.currentTimeMillis() Python int(time.time()) int(time.time() * 1000) Go time.Now().Unix() time.N
vivec
2019/08/20
4K0
java利用时间戳来获取UTC时间
由于项目原因,本人在做测试的时候发时间都是UTC时间,因此找了找解决方案,发现都是非常复杂,十几行代码实现此功能,其中主要都用在计算时间偏移量。我试了一下在calendar的getinstance方法参数修改并不能直接获取UTC时间,在尝试过之后终于找到一个简单的方法,通知data类直接获取时间戳,然后设置时间戳来达到转换时区的方法。分享代码,供大家参考。
FunTester
2020/04/03
2.8K0
python unix时间戳与正常时间转
   有时候业务需要,需要把正常的时间格式与unix时间戳格式进行转换。       在python中转化方式如下,直接利用time中的函数: #! /usr/bin/env python #coding:utf-8 import sys,os,re import time def timestamp_datatime(value): format = '%Y-%m-%d %H:%M' #format = '%Y-%m-%d %H:%M:%S' #value 为时间戳值,如:1
py3study
2020/01/06
2.7K0
移动直播转换Unix时间戳
腾讯视频云直播答题NTP时间同步方案是在推流 URL 之后添加 &txAddTimestamp=2 参数(之前的txAddTimestamp=1会在小程序上遭遇播放黑屏问题),由服务器在视频流每一帧打入一个带有国际标准时间(误差在 100ms 以内)的 SEI 时间戳。通过TXLiteAVSDK的 PLAY_EVT_GET_MESSAGE 消息事件获取的是一个8字节的64位时间戳。以下介绍了如何把这个8字节的64位时间戳转换成Unix时间戳。
腾讯视频云-Zachary
2019/09/07
2.3K0
移动直播转换Unix时间戳
Unix时间戳转换怎样在Excel批量修改?
  最近在操作项目的时候碰到一个Unix时间戳转换的问题。"date_time":1393031347这个是什么,你知道吗?如果你对Unix时间戳了解的话一眼就看出来。但我们本着科普的理念稍微介绍一下,大神请飘过。   看到date_time,我们第一反应就是日期时间,但是后面的一串数字什么意思天才晓得!我们是好学的孩子,不能做那么不负责的事情,不懂就找度娘,虽然度娘已经出走了。搜索了一下,大部分结果是说用不同编程语言进行datetime转换,比如java、perl、php等,虽然略知一二,但要写一个时间戳
ytkah
2018/03/05
3.1K0
Unix时间戳转换怎样在Excel批量修改?
【java系列】unix时间戳转Date[通俗易懂]
注意,不能直接使用Integer进行乘除和转换,需要转成bigDecimal去处理,否则转换出来的时间只会是1970-xxxx
全栈程序员站长
2022/09/07
2.7K0
Python获得13位unix时间戳
Python中的time模块把datetime时间转换为10位的时间戳,之前有记录过转换的方法。而今天调用的API中需要的是13位(一般Java里默认是13位(milliseconds,毫秒级的)。下面是我今天找到的方法,记录一下。 获取10位UNIX时间戳 #导入time模块 In [1]: import time   # 获取unix时间戳,并赋值给unix_Timestamp In [2]: unix_Timestamp = time.time()   #打印结果 In [3]: print unix
行 者
2018/03/26
2.8K0
utc时间戳转换器_java时间转字符串
1、String utcStr = “Thu Aug 14 16:45:37 UTC 2011”;
全栈程序员站长
2022/11/09
2.1K0
UNIX时间戳和北京时间的相互转换
准确的说,应该是unix时间戳,是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。一个小时表示为UNIX时间戳格式为:3600秒;一天表示为UNIX时间戳为86400秒,闰秒不计算。在很多API接口中,数据的更新时间并不是一个字符串,而是一个长整形数据,如1593003485,表示是北京时间2020-06-24 20:58:05。
单片机点灯小能手
2020/07/17
11.3K1
UNIX时间戳和北京时间的相互转换
python正常时间和unix时间戳时间的相互转换代码
这段代码可以用来转换常规时间格式为unix时间戳,也可以将unix时间戳转换回来 # -- coding: utf-8 -- import time def timestamp_datetime(value): format = '%Y-%m-%d %H:%M:%S' # value为传入的值为时间戳(整形),如:1332888820 value = time.localtime(value) ## 经过localtime转换后变成 ## time.struct_time(tm_year=2012
用户8983410
2021/11/02
1.7K0
python正常时间和unix时间戳时间的相互转换代码
这段代码可以用来转换常规时间格式为unix时间戳,也可以将unix时间戳转换回来 # -- coding: utf-8 -- import time def timestamp_datetime(value): format = '%Y-%m-%d %H:%M:%S' # value为传入的值为时间戳(整形),如:1332888820 value = time.localtime(value) ## 经过localtime转换后变成 ## time.struct_time(tm_year=2012
用户7999227
2021/11/02
1.3K0
时间戳 时间
背景 由于团队业务做的是国际项目,就无法避免一个问题--时区问题,很多业务都是跟时间有关。一些时间的对比,时间的展示,都会涉及到时区和时间戳,所以花点时间来简单总结一下 概念 时间戳 时间戳是一个自增的整数,它表示从1970年1月1日零时整的GMT时区开始的那一刻,到现在的毫秒数。假设浏览器所在电脑的时间是准确的,那么世界上无论哪个时区的电脑,它们此刻产生的时间戳数字都是一样的,所以,时间戳可以精确地表示一个时刻,并且与时区无关。 时区 时区(Time Zone)是地球上的区域使用同一个时间定义。188
千往
2018/01/24
5.8K0
时间,时间戳
将如上的时间2016-05-05 20:28:54转换成时间戳,具体的操作过程为:
zhengzongwei
2019/07/31
5.1K0
谷歌浏览器WebKit/Chrome时间戳与普通Unix时间戳互转 - 带Python/PHP实现
WebKit时间戳:从1601年1月1日(UTC/GMT的午夜)开始所经过的微秒数 Unix时间戳:从1970年1月1日(UTC/GMT的午夜)开始所经过的秒/毫秒数
kr
2023/01/30
8.3K0
Python获取当前时间戳_时间转换时间戳
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
9.6K0
Docker 中修改本地时间UTC
今天做在docker中发布了一个服务,需要用到计划任务,但是发现docker环境中本地时间为UTC,导致本地时间跟正常时间差了8个小时,以下放出如何修改Docker中的本地时间
BigYoung小站
2020/05/04
2.5K0
点击加载更多

相似问题

在Lua中获取UTC UNIX时间戳

314

在Unix中显示时间戳时间,在Android中显示UTC时间

20

Unix时间戳具有UTC差异

23

UTC时间戳字符串到UNIX时间戳

17

转换时间戳(UTC?)到使用JQuery的UNIX时间戳

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文