如何使用设备字体在同一个 Flash 应用程序中显示多语言文本

发布于 2025-01-01 08:50:16 字数 709 浏览 0 评论 0原文

更新: 我完全改变了这个问题,因为实际上,我很难正确使用同一应用程序中显示的多种语言的设备字体(同时)。

必须使用设备字体(不能使用.embedFonts = true属性),并且我不会屏蔽、缩放或旋转或设置动画无论如何,文字。我并不担心消失的问题和副作用。我注意到英文字符显示正确,但其他字符则不然...

例如以下编码字符:

सकत

相反,上述字符显示为空心方块。

有什么我需要使用/注意的吗?我研究过这些:

  • System.useCodePage;
  • TextField.defaultTextFormat;
  • TextField.setTextFormat(...);
  • 文本格式对象;
  • 样式表对象;
  • Font.enumerateFonts(true);

我想做的是显示来自各种来源和各种语言的单个单词(或短句子)。换句话说......许多文本字段将分散在彼此附近,但每个文本字段将使用一种独立于其他文本字段的语言。一个可能是普通话,另一个是西班牙语,另一个是法语,英语......等等。

我需要做什么才能让字体“_sans”(或任何支持的设备字体)以各种语言正确显示?

UPDATE:
I've completely changed the question because in reality, I'm having a really hard time properly using device-fonts for multiple languages displayed in the same app (at the same time).

I must use device-fonts (cannot use the .embedFonts = true property) and I won't be masking, scaling or rotating or animating the text anyways. I'm not worried about the disappearing issues side-effects. I'm noticing that English characters are showing up correctly, BUT other characters aren't...

Like the following encoded characters for example:

सकत

Instead, the above characters show up as hollow squares.

Is there something I need to use / be aware of? I've looked into these:

  • System.useCodePage;
  • TextField.defaultTextFormat;
  • TextField.setTextFormat(...);
  • TextFormat object;
  • StyleSheet object;
  • Font.enumerateFonts(true);

What I'm trying to do is display single words (or short sentences) from various sources and various languages. In other words.... many TextFields will be scattered near eachother, but each TextField will use one language independant from the other Textfields. One may be in Mandarin, another in Spanish, another in French, in English... etc.

What do I need to do to get the Font "_sans" (or any supported device fonts) to show up correctly in various languages?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

银河中√捞星星 2025-01-08 08:50:16

我想我可能终于解决了我的设备字体问题。

在 Flex 中,修改除零 (0) 之外的 letter-spacing 样式似乎会破坏对亚洲字符的字体支持。也许只有拉丁字符才需要使用这些额外的样式进行自定义。

但无论如何,对于那些遇到空心方块而不是实际亚洲字符的人,请确认您没有使用可能会导致问题的样式属性字符集不支持。

我使用正确样式设置标签的方法是覆盖 label setter 访问器:

override public function set label(value:String):void {
    super.label = value;

    //If English characters / numerals (space letters by 1-pixel):
    if(/[a-z0-9]/i.test(value)) {
        this.setStyle("letterSpacing", 1);
    } else {
        this.setStyle("letterSpacing", 0);
    }
}

I think I may have finally resolved my device-font issue.

In Flex, it looks like modifying the style letter-spacing other than zero (0) will break the font-support for Asian characters. Perhaps only the Latin characters are meant to be customized with those extra styles.

But anyhow, for those of you who encounter hollow squares instead of the actual asian character, verify that you are not using style-properties that may be unsupported by the character set.

My approach to setting the label with the correct style was to override the label setter accessor:

override public function set label(value:String):void {
    super.label = value;

    //If English characters / numerals (space letters by 1-pixel):
    if(/[a-z0-9]/i.test(value)) {
        this.setStyle("letterSpacing", 1);
    } else {
        this.setStyle("letterSpacing", 0);
    }
}
愁杀 2025-01-08 08:50:16

如果您查看文档,它们有不同的目的。

defaultTextFormat () “指定应用于新插入文本的格式”

因此这意味着当您将文本输入到 TF 中时,它将采用指定的格式。

setTextFormat () 将 format 参数指定的文本格式应用于文本字段中的指定文本。

如果在 defaultTextFormat() 之后调用 setTextFormat() 那么所有已插入的文本都会受到影响。但如果您要添加新文本,那么它将使用 defaultTextFormat() 格式。

更多信息:

setTextFormat ()

defaultTextFormat()

问题:如果字符未显示,您是否将 embedeFont 设为 true?如果是,那么您需要将要显示的字符嵌入到字体中。

有关我之前的答案中的字体的更多信息:

alternative-to-embedding -a-font-in-as3

替代embedding-a-font-in-as3

text-goes-invisible-on-embeddedfont-true

If you will look to the documentation they have different purposes.

defaultTextFormat () "specifies the format applied to newly inserted text"

So it means that when you will be entering a text into the TF it will take this format which were specified.

and setTextFormat () Applies the text formatting that the format parameter specifies to the specified text in a text field.

if after the defaultTextFormat() you calling the setTextFormat() then the allready inserted text will be affected. But if you will add new text then it will be using the defaultTextFormat() format.

more on that:

setTextFormat ()

defaultTextFormat()

Question: If the characters are not beeing displayed are you using the embedeFont as true? if yes then you need to embed the font with the characters you want to be displayed.

More about the fonts on my previous answers:

alternative-to-embedding-a-font-in-as3

alternative-to-embedding-a-font-in-as3

text-goes-invisible-on-embeddedfont-true

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文