首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >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

复制
相关文章
MFC控件编程之组合框跟列表框
  如果要使用组合框跟列表框.那么就要知道.组合框列表框是最核心的东西就是索引. 索引是从0开始的.
IBinary
2019/05/25
1.1K0
基因集合的数据框,列表和对象形式
这些都离不开生物学功能数据库,但是数据库不仅仅是GO/KEGG哦,目前最齐全的应该是属于 MSigDB(Molecular Signatures Database)数据库中定义了已知的基因集合:http://software.broadinstitute.org/gsea/msigdb 包括H和C1-C7八个系列(Collection),每个系列分别是:
生信技能树
2022/12/16
1.6K0
基因集合的数据框,列表和对象形式
oracle物化视图的刷新命令_物化视图增量刷新
普通视图仅包含其定义和被引用表的元数据,并不实际存储数据,查询数据时需要通过视图再去主表中获取数据。但是当需要查询的数据字段过多时,普通视图的效率会急剧下降。物化视图将经常使用的数据拷贝并存储下来,在查询时就可以直接返回数据。本质上是一个物理表,会占用磁盘空间。
全栈程序员站长
2022/11/15
2.6K0
【译】在列表视图中处理空值
本篇文章主要针对两类开发者。第一个是曾遇到过IllegalArgumentException: Path must not be empty问题的开发者。第二个则是当ListView使用了未被完整加载的图像,应用程序仍能正确运转的开发者们。
小鄧子
2018/08/20
1.2K0
列表内数字组合最大值
第一种 import itertools lt = [4, 40, 45, 6, 9, 3, 5, 2, 8] lt2 = map(str, lt) it = itertools.permutations(lt2,len(lt)) # for i in it: # print(i) m = map(lambda x:''.join(x), it) # for i in m: # print(i) print(max(m)) # print(m, type(m)) 第二种 lt = [4,
py3study
2020/01/17
8520
列表视图(ListView和ListActivity)
在ListView中显示网络图片  ImageView 类虽然有一个 setImageUri 方法,但不能直接接受一个由网络地址生成的uri作为参数从而显示图片,我们只好使用其 setImageBit
欢醉
2018/01/22
1.6K0
列表视图(ListView和ListActivity)
模板代码 - 列表和下拉刷新
摘要总结:本篇文章主要介绍了如何使用ViewStub和ViewStubCompat实现多布局,以便在不同的屏幕尺寸和分辨率下达到较好的展示效果。同时,还介绍了如何使用ViewStub和ViewStubCompat实现内边距和圆角,以及自定义属性在布局中的使用。
用户1172465
2018/01/05
2.9K0
html下拉框设置默认值_html下拉列表框默认值[通俗易懂]
HTML 和 JavaScript 综合练习题一、单项选择 1. Web 使用( D )在服务器和客户端之间传输数据。 A.FTP B. Telnet C. E-mail D. HTTP 2. HTTP 服务默认……
全栈程序员站长
2022/11/15
33.9K1
Vue改变数组值,页面视图为何不刷新?
这个问题还折腾了快半个小时,归根到底还是不经常使用的后果,好多代码之前都用过,像封装组件这种还要折腾,简直是不知道说什么好呀,只能以后多使用了。
执行上下文
2022/07/26
1.7K0
Vue改变数组值,页面视图为何不刷新?
数据框、矩阵和列表20230202
2、read.csv(" ") ⚠️文件在当前的工作路径中可以直接使用文件名,否则需要使用绝对路径,否则就会报错。
顾卿岚
2023/02/03
1.4K0
UI自动化 --- UI Automation 基础详解
上一篇文章UI自动化 --- 微软UI Automation中,介绍了UI Automation能够做什么,且借助 Inspect.exe 工具完成了一个模拟点击操作的Demo,文章结尾也提出了自己的一些想法,想要借助UI Automation做一个UI自动化测试平台。想法毕竟是想法,还是得落地实践,一步一步来。
Niuery Diary
2023/10/22
3.7K0
UI自动化 --- UI Automation 基础详解
【Python】基于多列组合删除数据框中的重复值
最近公司在做关联图谱的项目,想挖掘团伙犯罪。在准备关系数据时需要根据两列组合删除数据框中的重复值,两列中元素的顺序可能是相反的。
阿黎逸阳
2020/09/08
14.8K0
在jquery中用下拉框列表显示默认的值
1、在postUpdate.jsp中添加js如下: <script type="text/javascript"> $(document).ready(function(){ var qx_value = $('#qx_select_value').val(); $("#qx_select option[value='"+qx_value+"']").attr("selected", "selected"); }) </script> 核心代码就这一句话: $("
qubianzhong
2018/08/10
3.6K0
对象的组合
同步策略 规定了如何将不变性条件、线程封闭和加锁机制结合起来以维护线程的安全性,并且规定了哪些变量由哪些锁来保护
JavaEdge
2022/11/29
4090
flutter的列表下拉刷新
flutter的列表下拉刷新需要借助一个组件来实现,这个组件的名字是RefreshIndicator,直译过来就是刷新指示灯。
挥刀北上
2021/01/07
4.8K0
flutter的列表下拉刷新
Flat风格的Qml组合框
基于Qml的ComboBox控件修改而成。 组合框代码 import QtQuick 2.0 import QtQuick.Controls 2.0 import QtGraphicalEffect
Qt君
2019/12/16
1.2K0
突破数据验证列表,使用VBA创建3层和4层级联组合框
你是否曾想过管理级联数据验证(即“数据有效性”)列表,而不需要几十到数百个命名的单元格区域?这里为你提供一个示例工作簿,其中运用的方法可以动态创建数据验证列表,允许管理垂直列表,向列表中添加新列,并无缝更新数据验证列表。
fanjy
2022/11/16
1.4K0
突破数据验证列表,使用VBA创建3层和4层级联组合框
Django学习-第十二讲:视图高级(二)类视图、模板视图、列表视图、和分页
在写视图的时候,Django除了使用函数作为视图,也可以使用类作为视图。使用类视图可以使用类的一些特性,比如继承等。
小海怪的互联网
2019/10/08
1K0
SMART让您的内容和SEO更智能
你多学一样本事,就少说一句求人的话!只有自己足够强大,才不会被别人践踏。 SMART目标管理原则,如何用SMART原则来与SEO相关联?如何让SMART原则应用到网站内容中去?今天主要来聊聊SMART
黄伟SEO
2018/05/17
8440
js页面刷新或关闭时弹框消失_js刷新页面如何保留页面内容
  用法:onbeforeunload 事件在即将离开当前页面(刷新或关闭)时触发。该事件可用于弹出对话框,提示用户是继续浏览页面还是离开当前页面。对话框默认的提示信息根据不同的浏览器有所不同,标准的信息类似 “确定要离开此页吗?”。该信息不能删除。但你可以自定义一些消息提示与标准信息一起显示在对话框。注意: 在 Firefox 浏览器中,只显示默认提醒信息(不显示自定义信息)。
全栈程序员站长
2022/11/17
11.9K0

相似问题

组合框的列表视图值

11

当组合框#1更改值时刷新页面和组合框#2的内容

23

绑定对象更改时刷新视图

11

是否在字段值更改时刷新查询驱动的组合框值?

30

列表视图组合框

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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