0

I have a flex application that currently supports english , now my task is to translate it to different languages, that requires support for different parameters for the styles, for example , some buttons need to be wider and some font sizes need to change.

At first I tryed to add a css file at runtime, that was ignored (I guess because of the skin file attached to the component)

My question is what is the recomended way to support multy-language/styled flex application (css or skin) , and how is it done with skinning ?

Thanks!!

4

1 回答 1

0

一种方法

支持多语言/风格的 flex 应用程序

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

更好但更复杂的是只有一个应用程序,它在运行时加载一个语言资源包和一个特定于语言的 CSS 文件。

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

其次,您加载特定于语言环境的 CSS 以适应加载的语言。我建议您将样式表拆分为“main”(编译到应用程序中,具有所有不会更改的样式)和“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();

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

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

于 2013-04-18T02:46:01.930 回答