我正在使用Extjs5和Sencha Cmd,我正在使用l10n引擎(通过gettext)来实现本地化。
假设我想为项目的每个类提供翻译功能,名为 _()。
在每个控制器,视图,模型和任何类中,我都希望能够写出类似的东西:
Ext.define('FooClass', {
someStrings: [
_('One string to translate'),
_('A second string to translate'),
_('Yet another string to translate')
]
});
第一个问题:在项目的所有Ext.define()执行之前,_()必须存在。怎么实现呢?
第二个问题:_()正在查找“目录”,这些目录是从.po文件(gettext)生成的一些JavaScript文件。因此,在执行我的应用程序的所有Ext.define()之前,必须已加载这些目录。 _()是一个同步函数,必须立即返回已翻译的字符串。
答案 0 :(得分:2)
关于已修改问题的修改
您至少有两种方法可以加载外部库:
loadScript( options )
加载指定的脚本URL并调用提供的回调。如果 在Ext.isReady之前调用此方法,脚本的加载将延迟 过渡到准备好了。这可以用于加载任意脚本 可能包含进一步的Ext.require调用。
<强>参数强>
options : Object/String/String[] //The options object or simply the URL(s) to load. // options params: url : String //The URL from which to load the script. onLoad : Function (optional) //The callback to call on successful load. onError : Function (optional) //The callback to call on failure to load. scope : Object (optional) //The scope (this) for the supplied callbacks.
如果您仍然遇到问题,可以强制加载程序进行同步加载:
syncLoadScripts: function(options) {
var Loader = Ext.Loader,
syncwas = Loader.syncModeEnabled;
Loader.syncModeEnabled = true;
Loader.loadScripts(options);
Loader.syncModeEnabled = syncwas;
}
将其放在ExtJS库之后和生成的app.js
之前的文件中。
旧答案
您需要在需要时提供课程,这样才能解决您的问题。如果你不需要sencha命令/ ExtJS类系统不能知道你需要一个特定的类。
Ext.define('Class1', {
requires: ['Class2'],
items: [
{
xtype: 'combo',
fieldLabel: Class2.method('This is a field label')
}
]
});
如需进一步阅读,请查看:
<强> requires 强>
requires : String[]
在实例化之前必须加载的类的列表 类。例如:
Ext.define('Mother', { requires: ['Child'], giveBirth: function() { // we can be sure that child class is available. return new Child(); } });
<强> uses 强>
uses : String[]
与此类一起加载的可选类列表。这些 在创建此类之前不是必须加载,但是 保证在调用Ext.onReady侦听器之前可用。 例如:
Ext.define('Mother', { uses: ['Child'], giveBirth: function() { // This code might, or might not work: // return new Child(); // Instead use Ext.create() to load the class at the spot if not loaded already: return Ext.create('Child'); } });
答案 1 :(得分:1)
在ExtJs项目范围之外定义translate函数,并在Ext.html应用程序包含在index.html之前包含它。
脚本按正确的顺序加载,_()
函数可以在整个项目中使用。
<强> i18n.js 强>
function _() {
// do the translation
}
<强>的index.html 强>
<html>
<head>
<script src="i18n.js"></script>
<script id="microloader" type="text/javascript" src="bootstrap.js"></script>
</head>
<body>
</body>
</html>