为不同语言设置外观

时间:2013-04-17 14:02:16

标签: css flex skinning flex-spark

我有一个目前支持英语的flex应用程序,现在我的任务是将其翻译成不同的语言,这需要支持不同的样式参数,例如,某些按钮需要更宽,某些字体大小需要更改

起初我尝试在运行时添加一个css文件,但是被忽略了(我猜是因为附加到组件的皮肤文件)

我的问题是支持多语言/样式的flex应用程序(css或skin)的推荐方法是什么,以及如何使用蒙皮来完成?

谢谢!

1 个答案:

答案 0 :(得分:0)

的一种方法
  

支持多语言/样式化的Flex应用程序

是手动的 - 每种语言都有一个Flex Application项目,每个项目都包含相应的样式和资源文件。您可以将公共代码移动到每个应用程序依赖的库项目中......但是这不会超过> 3种语言。

更好但更复杂的是只有一个Application,它在运行时加载语言ResourceBundle和特定于语言的CSS文件。

首先,您的应用程序需要“知道”它正在显示的语言。也许您对用户进行身份验证,从服务器了解他们的区域设置,然后为该区域设置加载ResourceBundle。

其次,您加载特定于语言环境的CSS以适合加载的语言。我建议你将样式表拆分为“main”(编译成Application,包含所有不改变的样式)和“locale”(仅包含根据语言进行更改的样式)。

尽早在您的应用程序启动过程中,加载您的语言.css文件(例如,从服务器URL),类似

var cssLoader:URLLoader = new URLLoader();
var req:URLRequest = new URLRequest("path_to_server_side_css_file");
cssLoader.addEventListener(Event.COMPLETE, cssLoadCompleteHandler);
cssLoader.addEventListener(IOErrorEvent.IO_ERROR, someErrorHandler);
cssLoader.load(req);

在cssLoadCompleteHandler()中,神奇的事情发生了。 你想剥离任何可能会破坏你的解析的东西,比如评论,空白行,也许是命名空间。然后遍历文件中提取每个款式,选择等,基本上你是串黑客在这里,这是从来没有最好玩的写代码:/这是代码的非平凡块,你会希望有最干净,最有纪律您可以使用的CSS文件。它与尝试解析HTML的复杂性没有什么不同,除非希望你可以控制CSS输入的质量。 (你要对此进行一些测试,相信我)

无论如何......一旦你有了每种风格,例如.foo {}或#bar {}等,然后调用

FlexGlobals.topLevelApplication.styleManager.setStyleDeclaration(...) ;

依次为每一个。最后致电

FlexGlobals.topLevelApplication.styleManager.styleDeclarationsChanged();

现在,您可以在Skin类中使用样式(通过styleManager.getStyleDeclaration(""))来获取所需的样式,无论是样式中的样式还是动态加载的样式。

希望有所帮助。它可以做到,但实现起来并非易事。祝你好运。