- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Objective C 中构建 Mac OSX (Cocoa) 应用程序时,我使用 native Webkit 小部件来显示具有 file://
URL 的本地文件,从以下文件夹中提取:
MyApp.app/Contents/Resources/lang/en/html
这一切都很好直到我开始需要德语版本。这意味着我必须将 en/html 复制为 de/html,然后让人替换 HTML 中的措辞(并且有些在 Javascript 中(比如模态对话框))带有德语短语。这是相当大量的工作!
好吧,这似乎是可行的,直到这引起了我的头痛,我必须为我需要支持的每种语言不断维护 html 文件夹的多个版本。
然后我就想到了......
Why not just replace the phrasing with template tags like %CONTINUE% and then, before the page is rendered, intercept it and swap it out with strings pulled from a language plist file?
通过此小部件的某些 API,是否可以在渲染 HTML 之前拦截 HTML 并替换文本?
如果可能的话,会不会明显慢到不值得?
或者,您是否建议我采取一种策略,在我的工作站上构建一个生成器,该生成器从主模板为我构建每个 HTML 文件夹,然后部署那些已通过我的设置完成的文件夹一旦我从设置应用程序确定用户的语言,应用程序?
最佳答案
通过大量实验,我发现了一种丑陋的模板制作方法。就像我说的,这是不可取的,并且有一些副作用:
您将在第一个窗口加载时看到闪烁。首次加载具有 WebKit 小部件的应用程序窗口时,您需要隐藏该窗口,直到第二次显示页面内容。我猜你必须为此使用一个属性。
导航时,每个页面都会加载两次。它几乎不引人注目,但还不足以实现良好的开发。
我发现 Bootstrap CSS 有一个奇怪的怪癖,它使我的表格网格行非常大,并且由于某些奇怪的原因没有正确应用 CSS。我也许可以调整 CSS 来解决这个问题。
不幸的是,除了 didFinishLoadForFrame
之外,我没有发现其他可以拦截的事件。然而,到那时,页面已经下载并呈现至少一次,持续一微秒。在此之前拦截一些事件会很棒,我有完整的 HTML,并在显示之前进行交换。我没有找到这样的事件。然而,如果有人发现这样的事件——这可能会成为一个很好的模板解决方案。
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
{
DOMHTMLElement * htmlNode =
(DOMHTMLElement *) [[[frame DOMDocument] getElementsByTagName: @"html"] item: 0];
NSString *s = [htmlNode outerHTML];
if ([s containsString:@"<!-- processed -->"]) {
return;
}
NSURL *oBaseURL = [[[frame dataSource] request] URL];
s = [s stringByReplacingOccurrencesOfString:@"%EXAMPLE%" withString:@"ZZZ"];
s = [s stringByReplacingOccurrencesOfString:@"</head>" withString:@"<!-- processed -->\n</head>"];
[frame loadHTMLString:s baseURL:oBaseURL];
}
上面的代码将查看包含 %EXAMPLE%
的 HTML,并将其替换为 ZZZ
。
最后,我意识到由于页面闪存的原因,这是低效的,并且,在需要大量替换的长文本上,可能会有一些相当明显的延迟。更好的方法是创建一个编译时生成器。这将创建一个 HTML 文件夹,其中包含 %PARAMETERIZED_TAGS%
而不是英文文本。然后,在“构建阶段”中创建一个“运行脚本”,运行您以任何语言创建的程序/脚本,从目录中所有可用的 lang-XX.plist 文件生成每个 HTML 文件夹,其中 XX是语言代码,如“en”、“de”等。它读取 HTML 文件,在 lang-XX.plist 文件中查找参数化标记匹配,然后将该文本替换为该语言的文本。这样,编译后,每种语言都会有多个 HTML 文件夹,并且已经在使用翻译后的字符串。这是高效的,因为它允许您在一个 HTML 文件夹中处理代码,而不必执行以每种语言创建每个 HTML 文件夹的极其繁琐的过程,也不必维护这种困惑。编译时生成器会为你做这件事。但是 - 您必须构建编译时生成器。
关于html - 使用 Cocoa Webkit 进行国际化显示前修改 HTML 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35121259/
我有一个 Java 字符串,但在处理时遇到了问题。我有一个字符串 s,它的值为丞(我随机选择的一个汉字,我不会说中文)。如果我打电话 String t = new String(s.getBytes(
在Qt中,所有的输入部件和文本绘制方式对Qt支持的所有语言都提供了内置的支持。Qt内置的字体引擎可以在同一时间正确而且精细地绘制不同的文本,这些文本可以包含来自众多不同书写系统的字符。如果想了解更多的
如何实现字段标签、帮助文本等的国际化支持。字段的标准乘法似乎不起作用例如文档中给出的用于创建联系表单的示例。我尝试为其他语言添加额外的字段(文档中描述的第一种方法) from django.db
是否有可能当我在操作类中使用“getText(”keyName”); 时,我可以指定仅从 ENGLISH 资源包中选择值。因为我只想将此值用于日志记录目的。 任何想法我怎么能做到这一点? BR 标准委
我有一些关于 GWT 的国际化解决方法的问题。 1) 处理直接写入 ui.xml 文件的静态文本的最佳方式是什么? 目前,我正在使用 Messages-Interface 来翻译 Java 生成的文本
我在 Symfony 2 中遇到了一个奇怪的翻译问题。 这是我的config.yml imports: - { resource: parameters.yml } - { resou
对于我的大部分应用程序,我可以使用 https://developers.google.com/web-toolkit/doc/latest/DevGuideI18n 中列出的推荐国际化技术。 (主要
我使用 Android Studio 创建了一个新的 Flutter 项目。我正在使用null-safety,并且正在物理设备上运行应用程序,但代码生成无法正常工作,没有flutter_gen.dar
这里是菜鸟。 我正在尝试对基于命令行的程序实现国际化。以下是 java 国际化路径中可用的内容。 import java.util.*; public class I18NSample { s
我使用 Android Studio 创建了一个新的 Flutter 项目。我正在使用null-safety,并且正在物理设备上运行应用程序,但代码生成无法正常工作,没有flutter_gen.dar
我正在开发一个需要多语言的应用程序。 我正在尝试关注 this国际化教程。但是,当我尝试“使用基本国际化”时, View 中没有列出我的 Storyboard。 我正在使用 XCode 4.6.3 我
我住在印度(有超过20种语言)我正在尝试在网站中实现java国际化。 但是在 Locale.getAvailableLocales() 中,本地语言不可用。我的情况是否可以实现国际化? 如果可能的话字
我有以下 SDN 4 实体: 决策、特征和值: @NodeEntity public class Value { private final static String SET_FOR = "
关于MySql,是否有支持所有或绝大多数语言的字符集? 最佳答案 统一码。它有几种编码:UTF-8、UTF-16 和 UTF-32。 来自 http://en.wikipedia.org/wiki/U
我目前正在使用 Vuepress。但是我想要在我的 Vuepress 站点中使用多种语言。经过 3 天的挣扎,我决定把我的问题放在这里。 (是的,我查看了 Vuepress 文档:https://vu
我需要返回一个 strftime() 调用,该调用使用与我本地机器/操作系统上设置的语言不同的语言。是否可以选择返回语言? 最佳答案 对于可靠的 i18n/L10N,可由必须在同一运行中提供不同本地化
我有一些按钮,按下它们后我想播放一些音频。按钮的名称是音频文件的名称 private func playAudio(title : String){ audioPlayer = AVAudio
如何更改 HTML5 的消息(或者它会根据浏览器的语言自动更改?) 例如: E-mail: 当我在 Opera 运行此代码(来自 W3schools)
我发现很多关于 url schemes 的话题,最常见的是: www.mysite.com/fr/products www.mysite.com/en/products www.mysite.com/
在 Android WebView 中处理国际化/本地化的最佳方式是什么。理想情况下,我想访问以下位置的所有字符串资源: res/values/strings.xmlres/values-de/str
我是一名优秀的程序员,十分优秀!