的目的的<bdi>
在HTML5标签是双向文本隔离它的上下文.这正是我正在寻找的.
从左到右的用户名显示如下:
Welcome, Generic User. [Logout]
Run Code Online (Sandbox Code Playgroud)
使用从右到左的用户名会变成这个可怕的东西:
Welcome, [tougoL] .resU cireneG
Run Code Online (Sandbox Code Playgroud)
甚至更糟糕,取决于上下文,向后显示周围的一切(而不仅仅是用户的名字).
问题是没有浏览器支持<bdi>
标签,所以我在徘徊,有没有办法模拟它?什么HTML标签可以隔离它?我知道<span>
,<div>
不知道.
我不想删除所有BIDI字符,但我看到它的方式,我的网站正确显示的重要性>双向语言用户参与的权利.
在自定义的Android视图中,我正在绘制几个可能是双向的用户输入文本.例如希伯来语或阿拉伯语混合英文文本或数字.要绘制文本,我基本上使用视图的Canvas,TextPaint和StaticLayout.实际的代码相当复杂并且分散开来,但绘制文本的位看起来像这样:
TextPaint _paint = getPaint();
Canvas _canvas = ...; // the canvas passed in the View.onDraw(Canvas canvas) method
PointF l = locationCenter(); // the location at which the center of text should be painted
int alignment = getAlignment(); // for this element, can vary for each element.
PointF textSize = getTextBounds(); // the bounding box of the text
String text = userInputText(); // actually some user input BiDi text
switch (alignment) {
case 0:
_paint.setTextAlign(Paint.Align.CENTER);
l.x += textSize.x / 2.0f; …
Run Code Online (Sandbox Code Playgroud) 这是我的HTML结构:
div{
direction: rtl;
}
span{
direction: ltr;
}
Run Code Online (Sandbox Code Playgroud)
<div>
<span>????? -2</span>
</div>
Run Code Online (Sandbox Code Playgroud)
这是预期的结果:
如您所见,-
签名应该在数字的开头.我怎样才能做到这一点?
注意:方向div
应该是rtl
.
编辑:我生成这样的数字:
$sums_value = sprintf("%+d",$sums_value);
/*
sums_value = -2 //=> -2
sums_value = 2 //=> +2
Run Code Online (Sandbox Code Playgroud)
所以数字格式正确,但我不知道为什么它会在输出中被破坏:
我一直在网上搜索并向人们询问这个主题,但我确实没有得到令人满意的答案,让我在这里用 python 解释我的问题。
假设我有这个字符串:
a = '??? ???? ??? (80) ?? (something) ?????? ????? ?????'
Run Code Online (Sandbox Code Playgroud)
上面的字符串实际上应该如下所示:
b = '?????? ????? ????? (something) ??? ???? ??? (80) ??'
Run Code Online (Sandbox Code Playgroud)
因为它从 ( ??? )开始,到 ( ????? )结束
请记住,变量a的内容是按顺序正确写入的,但是 python SADLY打印出来的是它所看到的,所以输出是不正确的,尽管写入是正确的,当 ( (something) ) 进入字符串时它被翻转了,所以变量b内容是一种使文本保持正确形状的变通方法,尽管它写错了,而且不是按应写的顺序!
现在,你可能会说“如果你找到了让它工作的方法,你还在胡说八道什么?!:S”,我发现了一种使文本保持形状并看起来不错和可读的方法,我发现python 比“python 打印它看到的东西”有更多的意义当它试图打印一个双向字符串时,python 实际上以一种非常奇怪的方式运行,它实际上是在字符串周围跳跃以打印它,它没有起点和终点点(意思是从右到左或从左到右打印)让我们以变量b字符串为例:
而不是从右边打印字符串作为起点到左边作为终点(应该是),
python 会先打印 ( ?????? ??????? ????? ),然后是 ( (something) ) 其次,然后是 ( ??? ?????? ??? (80) ?? ) 第三最后打印的字符串将是 ( ?????? ????? ??????? (something) ??? ???? ??? …
虽然大多数操作系统和Web浏览器都非常支持希伯来语和阿拉伯语等双向文本,但大多数商业和开源软件都没有:
我有一些问题:
我正在使用iTextSharp(C#iText端口)从text/html创建pdf.我的大部分文字都是希伯来语,一种从右到左的语言.
我的问题是PDF反向显示RTL语言,所以我需要以一种只能反转RTL文本的方式来反转我的字符串而不用英语反转任何数字或文本.据我所知,fribidi允许在linux上执行此操作,但我无法找到针对此问题的任何解决方案.
我欢迎任何建议,包括自动执行此操作的iTextSharp的替代方案(如果存在).
我在Python中使用PIL编写了一些代码,它会将UTF-8字符打印到图像中.
我注意到,为了加入像阿拉伯语这样的Bidi脚本,相同的代码无法正确连接字符(只选择初始表单,不使用中间和最终表单)
任何人都可以推荐一种方法或技术来解决这个特殊问题吗?
python multilingual image-manipulation bidi character-encoding
我有一个ListView
自定义View
我有一个TextView
:
<TextView
android:id="@+id/textViewItemTitle"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:gravity="right|center_horizontal"
android:text="title" />
Run Code Online (Sandbox Code Playgroud)
这TextView
包含希伯来文.
if(!bidi.isRtl(event)){
event = bidi.unicodeWrap(event);
}
holder.title.setText(String.format("%s %s %s", bidi.unicodeWrap(item.getStartTimeNoDate().trim()), event,
bidi.unicodeWrap(item.getDuration().trim())));
Run Code Online (Sandbox Code Playgroud)
第一个参数是时间hh:mm:ss,second(event)是希伯来字符串,第三个是第一个.
问题: 有时候事件String包含希伯来语和英语的混合文本,就像abc-???
所有文本的行为都像重力一样(并且不像我在文本视图中定义的那样),我的意思是向左缩进.
怎么解决?
当我尝试使用阿拉伯语中的括号时,它们会被反转,如附件中所示 .
我已经尝试过使用textDirection RTL和BidiFormatter,但它们都不起作用.
正确的字符串是这样的"(باقةمسافرإسبوعي(مسبق).
有谁知道,如何解决它?
我有一个双向文本
1002 -??? ???? ????????
Run Code Online (Sandbox Code Playgroud)
大多数编辑记事本++,记事本等显示文本,如此处所示.但是当我通过ICU处理这个文本时,数字会向右移动,然后是空格和连字符,然后是阿拉伯语.ICU的示例应用程序layout.exe也显示右侧的数字.我修改了paragraphlayout.cpp并设置了所有可能的重新排序模式,但结果仍然相同:
有人可以帮助配置ICU以提供其他显示引擎的输出.