- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
TextView 总是遇到 RTL(从右到左)语言的问题。由于我只知道如何阅读希伯来语(除了英语),我将谈谈它的问题:
文本对齐(我不是在谈论重力)。作为一种 RTL 语言,希伯来语将单词从右到左排列(与英语相反)。
为了演示它有多烦人,想象一下,而不是显示“Hello world”。你通常会得到 ".Hello world"。如果您将其放在一个句子中,则可以轻松解决此问题,但如果有多个标点符号,则更难解决。
元音位置。希伯来语不需要元音来阅读文本,但有时没有它们很难阅读(尤其是圣经)。对于元音,希伯来语有所谓的“NIKUD”,实际上就像字母中的点。 Android 中的问题是它们通常被放置在错误的位置。
为了演示它有多烦人,想象一下,而不是显示“Hello world”。你通常会得到 ".eHlol owrld"。即使您尝试修复它(将元音始终放在当前字符后一个字符),字母中的位置也不正确(想象“Hello”中的“e”会像“H”一样,因为示例)。
仅在 4.2 版(阅读 here,在“本地 RTL 支持”下),Google 已修复所有与希伯来语相关的问题(或至少看起来如此)。
希伯来语的问题导致每个以色列运营商和每个定制 ROM 制造商都有自己的解决方案来解决不同的问题,这使得在 4.2 之前的设备上处理 RTL 文本几乎是不可能的。
如果文本同时包含希伯来语和英文字母,事情会变得更加令人沮丧。
我已经阅读了许多谈论这些问题的网站,并且我尝试了许多解决方案的变体,但没有一个能够解决所有设备上的问题:
有些人建议将字符“\u200F”(或“\u202D”)放在文本的结尾/开头/两者。
有些人建议使用 Html.fromHtml()方法并在那里放一些特别的东西。
有些人甚至建议改用 WebView(也许使用 WebSettings.setDefaultTextEncodingName())。
这个问题有确定的解决方案吗?
我认为最好的事情是因为 Android 4.2 解决了这个问题,而且 Android 是开源的,我们应该将它的 TextView 导入我们可以使用的库中,但 Google 还没有提供这样的库。
最佳答案
遗憾的是,我认为没有好的解决方案(“好”的意思是“可以完成工作并且随时可用”)。对于我们自己的支持希伯来语的 Android 应用程序,我们使用了我们多年来开发的自定义渲染机制。渲染机制无所不能:专有字体;双向 (bidi) 分析;字形放置;换行分析;文本流;等。尝试使用原生 Android 文本处理功能(尤其是 4.2 之前)的一些问题是:
真的很糟糕的字体。但是,您可以打包第三方字体,如 DejaVu那是相当不错的。正确的字体可以在 nekudot 和 te'amim1 的位置上创造奇迹,如果你需要的话。 (我同意你关于正确定位的重要性;阅读带有错位 nekudot 的希伯来语文本就像阅读满屏的 CAPTCHAs。)
Buggy 比迪烟分析。更糟糕的是,对于不同版本的 Android,这些错误似乎有所不同。修改文本以包含策略性放置的双向格式代码(RTL 标记;LTR 标记等)可以克服许多这些错误(请参阅讨论 here,这不是特定于 Android 的)。但是,这样做很麻烦,而且由于 Android 版本之间的不一致,很难提前预测框架需要哪些帮助。
对从右到左的问题没有(或考虑不周)框架级别的意识。例如,祝滚动条显示在希伯来文 TextView 的左侧。对于我们的应用程序,我们必须构建一个完整的滚动条系统才能让它按照我们的意愿工作。 (好想 Android 是开源的!)
糟糕的换行和分词分析。我们测试的至少一个早期版本的 Android 认为每个 nikud 标记都是一个单词边界。当涉及换行时,系统通常不知道如何处理希伯来语标点符号,如 maqaf、gershayim 或 sof pasuk。
系统无法将一些较新的 Unicode 字符(如 HOLAM HASER FOR VAV—U+05BA—Unicode 5.0 的新字符)识别为希伯来文。
我的建议是,除非您准备自己构建一个从上到下的文本处理系统,否则您放弃在 4.2 之前的 Android 版本上进行高质量的文本显示,特别是如果您需要支持 nekudot 和特阿米姆。另外,计划使用我在上面前两点中提到的技术。
1 圣经的音符
关于android - 如何在 4.2 之前的 Android 版本上处理 RTL 语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15746091/
iOS 应用程序,我们要显示来自服务器的新闻。使用UIlabel 当他只用一种语言而不考虑布局时,一切都是完美的(我们正在将布局 RTL 切换为 LTR,以适应不同的语言,包括阿拉伯语、希伯来语) 当
新版本的 React Native 已经发布了对 RTL 设备的支持: https://facebook.github.io/react-native/blog/2016/08/19/right-to
我将 Material UI 5 与 next.js 一起使用,并使用 emotion 和 stylis-plugin-rtl v2 实现了与此处文档完全相同的每个步骤: https://next.m
我知道如何在方向为内联时设置样式 foo div[dir="rtl"] { ....; } 但是如何设置样式 foo ? 两者的行为都符合预期(文本的右“对齐”),但我需要对内部的某些元素进行更精细
这个问题在这里已经有了答案: What is use of android:supportsRtl="true" in AndroidManifest xml file (4 个回答) 关闭4年前。
我正在使用material-ui和next和jss-rtl在我的react项目但是有一个问题页面仍然是ltr使用后 -rtl组件代码: import React from "react"; impor
我敢发誓,vivado 有一个错误,它永远不会刷新对 RTL 文件、verilog 或 vhdl 所做的任何接口(interface)更改,在使用“添加模块”将其粘贴到“ block 设计”后....
我正在尝试将 react Material 模板添加到我的 reactJs 项目中。我修复了所有错误,但我无法修复这个错误 WARNING in ./node_modules/stylis-plugi
我在 android 中构建一个绘图应用程序,我在绘制矩形时注意到一个问题。应该根据语法绘制矩形 new Rect(left, top, right, bottom) 现在我的逻辑通过取起点 (sta
我将 Tinymce 编辑器安装到我的网站。现在我需要将默认方向设置为 RTL 而不是 LTR。您可以在下面看到-- tinymce.init({ selector: 'textar
我注意到没有 bottomEndRadius在形状中,而只是 bottomRightRadius 是否有任何解决方法来支持从右到左的布局? 最佳答案 我发现的唯一方法是为 R
我使用此代码来运行具有 RTL 支持的 Isotope $.Isotope.prototype._positionAbs = function( x, y ) { return { right:
尝试显示以数字开头的希伯来语字符串,总是在字符串末尾显示数字,如下所示:1. йום שйשй בבוקר 但我需要在文本右侧显示数字- 有什么解决办法吗? 它发生在 UILabel & UIText
我在 react-native 中创建了一个应用程序,当电话语言为 En 时一切正常,但是当我更改电话语言时,UI 崩溃并且一切都向后 我在用 "react": "16.6.3", "reac
WordPress 非常强大......但对于阿拉伯语和希伯来语等 RTL 语言却很弱......我需要让前端使用阿拉伯语,而管理区域则需要使用英语,当然还有 LTR。如果我使用阿拉伯语版本的Word
我想知道为什么将Camera2 API与RTL语言一起使用时,摄像机预览会有所不同。具体来说,我有两个问题: 使用RTL时,相机上是否有任何特定设置? 我正在通过OpenCV使用边缘检测。 OpenC
我正在尝试在阿拉伯语 RTL 页面中使用 jQuery 菜单。我可以将其设为 RTL,但图标应该是 ui-icon-carat-1-w 而不是 ui-icon-carat-1-e。我创建了jsfidd
我正在尝试在统一输入字段中编写波斯语。波斯语是从右到左的语言,其字母与阿拉伯语相似。 我找到了 library转换和更正文本。它工作得很好。当我将转换后的文本显示为 Debug.Log() 时,一切都
我的应用程序支持 4 种不同的语言,其中两种是从右到左编写的。 如果我从 android 系统更改语言然后启动我的应用程序,一切正常。我得到一个镜像布局 (RTL),甚至导航栏也是镜像的。 我的问题是
我正在设计一种布局,该布局在不同的 View 中同时包含英语和希伯来语(旨在从右到左)文本。当一行希伯来语文本超过一定长度时,它会变成从左到右书写(我认为这与长度有关,因为它在较短的文本上看起来很好,
我是一名优秀的程序员,十分优秀!