- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如您所知,许多 ui 组件和开发工具不支持 rtl ,我们可以将其称为 flipping text ,因为结果与示例相同:
左转
سلام salam متن راهنما word
RTL
word متن راهنما salam سلام
有没有办法把这个 LTR 转换成 RTL,我不知道,语言也不重要
实际上我正在寻找一种解决方案来在 RAD Studio Firemonkey 应用程序中完成这项工作,因为您可能知道 firemonkey 应用程序不支持 rtl 它在 rad studio 的路线图中但尚未实现
最佳答案
在 Windows 下,您可以通过 UniScribe API。
我用它把 Unicode 文本转换成一组字形,用于我们的 Open Source PDF writer .
您在 SynPdf.pas 中有源代码示例单元。参见 TPdfWrite.AddUnicodeHexTextUniScribe
方法:
function TPdfWrite.AddUnicodeHexTextUniScribe(PW: PWideChar;
WinAnsiTTF: TPdfFontTrueType; NextLine: boolean; Canvas: TPdfCanvas): boolean;
var L, i,j: integer;
res: HRESULT;
max, count, numSp: integer;
Sp: PScriptPropertiesArray;
W: PWideChar;
items: array of TScriptItem;
level: array of byte;
VisualToLogical: array of integer;
psc: pointer; // opaque Uniscribe font metric cache
complex,R2L: boolean;
complexs: array of byte;
glyphs: array of TScriptVisAttr;
glyphsCount: integer;
OutGlyphs, LogClust: array of word;
procedure Append(i: Integer);
// local procedure used to add glyphs from items[i] to the PDF content stream
var L: integer;
W: PWideChar;
procedure DefaultAppend;
var tmpU: array of WideChar;
begin
SetLength(tmpU,L+1); // we need the text to be ending with #0
move(W^,tmpU[0],L*2);
AddUnicodeHexTextNoUniScribe(pointer(tmpU),WinAnsiTTF,false,Canvas);
end;
begin
L := items[i+1].iCharPos-items[i].iCharPos; // length of this shapeable item
if L=0 then
exit; // nothing to append
W := PW+items[i].iCharPos;
if not GetBit(complexs[0],i) then begin
// not complex items are rendered as fast as possible
DefaultAppend;
exit;
end;
res := ScriptShape(0,psc,W,L,max,@items[i].a,
pointer(OutGlyphs),pointer(LogClust),pointer(glyphs),glyphsCount);
case res of
E_OUTOFMEMORY: begin // max was not big enough (should never happen)
DefaultAppend;
exit;
end;
E_PENDING, USP_E_SCRIPT_NOT_IN_FONT: begin // need HDC and a selected font object
res := ScriptShape(Canvas.FDoc.GetDCWithFont(WinAnsiTTF),
psc,W,L,max,@items[i].a,
pointer(OutGlyphs),pointer(LogClust),pointer(glyphs),glyphsCount);
if res<>0 then begin // we won't change font if necessary, sorry
// we shall implement the complex technic as stated by
// http://msdn.microsoft.com/en-us/library/dd374105(v=VS.85).aspx
DefaultAppend;
exit;
end;
end;
0: ; // success -> will add glyphs just below
else exit;
end;
// add glyphs to the PDF content
// (NextLine has already been handled: not needed here)
AddGlyphs(pointer(OutGlyphs),glyphsCount,Canvas);
end;
begin
result := false; // on UniScribe error, handle as Unicode
// 1. Breaks a Unicode string into individually shapeable items
L := StrLenW(PW)+1; // include last #0
max := L+2; // should be big enough
SetLength(items,max);
count := 0;
if ScriptItemize(PW,L,max,nil,nil,pointer(items),count)<>0 then
exit; // error trying processing Glyph Shaping -> fast return
// 2. guess if requiring glyph shaping or layout
SetLength(complexs,(count shr 3)+1);
ScriptGetProperties(sP,numSp);
complex := false;
R2L := false;
for i := 0 to Count-2 do // don't need Count-1 = Terminator
if fComplex in sP^[items[i].a.eScript and (1 shl 10-1)]^.fFlags then begin
complex := true;
SetBit(complexs[0],i);
end else
if fRTL in items[i].a.fFlags then
R2L := true;
if not complex then begin
// no glyph shaping -> fast append as normal Unicode Text
if R2L then begin
// handle Right To Left but not Complex text
W := pointer(items); // there is enough temp space in items[]
W[L] := #0;
dec(L);
for i := 0 to L do
W[i] := PW[L-i];
AddUnicodeHexTextNoUniScribe(W,WinAnsiTTF,NextLine,Canvas);
result := true; // mark handled here
end;
exit;
end;
// 3. get Visual Order, i.e. how to render the content from left to right
SetLength(level,count);
for i := 0 to Count-1 do
level[i] := items[i].a.s.uBidiLevel;
SetLength(VisualToLogical,count);
if ScriptLayout(Count,pointer(level),pointer(VisualToLogical),nil)<>0 then
exit;
// 4. now we have enough information to start drawing
result := true;
if NextLine then
Canvas.MoveToNextLine; // manual NextLine handling
// 5. add glyphs for all shapeable items
max := (L*3)shr 1+32; // should be big enough - allocate only once
SetLength(glyphs,max);
SetLength(OutGlyphs,max);
SetLength(LogClust,max);
psc := nil; // cached for the same character style used
if Canvas.RightToLeftText then
// append from right to left visual order
for j := Count-2 downto 0 do // Count-2: ignore last ending item
Append(VisualToLogical[j]) else
// append from left to right visual order
for j := 0 to Count-2 do // Count-2: ignore last ending item
Append(VisualToLogical[j]);
end;
当然,这只是在 Windows 下。所以它不能在 Mac OS X 上运行。你必须在 Mac OS X 下使用另一个库...
关于c++ - 将 LTR 转换为 RTL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8910287/
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 中同时包含英语和希伯来语(旨在从右到左)文本。当一行希伯来语文本超过一定长度时,它会变成从左到右书写(我认为这与长度有关,因为它在较短的文本上看起来很好,
我是一名优秀的程序员,十分优秀!