使从左到右的语言写成从右到左 html
Make left to right languages be written as right to left html
在我的 html 页面中,我需要让我的文本输入接受一组特定的字母。我通过捕获按键事件并检查输入的字符是否有效来做到这一点。
这些允许的字符既取自从左到右书写的英语,也取自从右到左书写的其他几种语言。输入的每个单词可以是英语和阿拉伯语、希伯来语字母的混合。
我需要让文本框显示从右到左书写的文本(希伯来语或阿拉伯语的相同行为适用于英语)-
例如,如果我写下 -
一个
乙
א
ב
C
D
是
我希望它完全按照从右到左的顺序呈现。
设置"style:dir=rtl"
并没有解决它,它只是从右到左呈现要写的文本,但实际上并没有根据我的需要改变要呈现的英文字符的顺序。
rtl
结果是这样的:
B
一个
א
ב
是
D
C
最好的方法是什么?
编辑:
这似乎解决了我的问题:Right to left Text HTML input
尽管没有像我希望得到的那样详细解释解决方案。
你可以用 js 做到这一点
<div id="id_of_content"></div>
<script type="text/javascript">
// if updating the div in realtime then try using keypress listener to call this function
function(id_of_content) {
var text = $('#'+id_of_content).text();
var words = text.split(' ');
var result = '';
for(var j=0;j<words.length;j++) {
if(/[^a-zA-Z]/.test(words[j])) {
var temp = words[j];
var rev_word = '';
for(var i=0;i<temp.length;i++) {
rev_word += temp[temp.length-i-1]
}
result += rev_word;
}
else {
result += words[j];
}
}
$('#'+id_of_content).text(result);
}
</script>
希望这对您有所帮助
将您的文本框样式设置为:
style="direction:rtl; unicode-bidi:bidi-override;"
为什么?
当您只是设置方向性(使用 direction: rtl
)时,您在该长文本中仍然有单独的 "directional runs",每个都有自己的呈现行为。 "AB" 部分是从左到右的 运行,这就是为什么您会看到它呈现为英语单词且 B 在 A 的右侧。
添加 unicode-bidi: bidi-override
告诉浏览器忘记那些单独的 运行 并简单地从右到左一个接一个地呈现所有字符。
[添加以解决使用数据的潜在客户端应用程序]
对于使用此数据的客户端应用程序,您可以以某种方式提供字符串本身,即使这些客户端应用程序不在您的控制范围内,也可以强制它们正确显示它。
假设客户端应用程序使用 API 或某种服务访问数据(意味着您不让它们直接访问您的数据库),那么您可以添加一个名为 [=13= 的 Unicode 控制字符] (RLO) 到字符串的开头,然后再将其发送给客户端。
RLO 字符代码是 \u202E
,因此按照上面的示例,您向客户 return 生成的字符串将是:
\u202E
一个
B
א
C
D
是
大多数网络浏览器和操作系统尊重 BiDi 控制字符并应用正确的 BiDi 呈现逻辑。因此,当客户端应用程序将该字符串输出到 UI 时,底层渲染引擎应按您的预期显示该字符串。
注意:将 unicode 字符通过其十六进制代码添加到字符串中可能会因您的平台和编程语言而异。
嗯,我浏览了一些与 RTL 相关的博客和示例,并提出了以下工作示例。
在此代码切换选项中,您可以通过单击此按钮同时尝试 LTR 和 RTL -
JSfiddle:http://jsfiddle.net/vikash2402/ammajhy3/3/
下面是它的工作代码。
// Jquery, BS3 & Awesome
$('#rtl-button').click(
function () {
var src = 'http://cdnjs.cloudflare.com/ajax/libs/bootstrap-rtl/3.2.0-rc2/css/bootstrap-rtl.min.css';
if ($(this).attr('data-direction') == 'ltr') {
$('head').append('<link href=' + src + ' rel="stylesheet" id="bootstrap-rtl" />');
$(this).attr('data-direction', 'rtl');
} else { // by default we load bootstrap-rtl
$('head link[href="' + src + '"]').remove();
$(this).attr('data-direction', 'ltr');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<link href="http://cdnjs.cloudflare.com/ajax/libs/bootstrap-rtl/3.2.0-rc2/css/bootstrap-rtl.min.css" rel="stylesheet"/>
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet"/>
<script src="http://netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js"></script>
<div class="container">
<h3>Testing bootstrap RTL css overwrite</h3>
<nav class="navbar navbar-default" role="navigation">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> <span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button> <a class="navbar-brand" href="#"><span class="glyphicon glyphicon-home"></span> Home</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="#">Welcome</a></li>
<li><a href="#"><span class="glyphicon glyphicon-phone-alt"></span> Contact us</a></li>
<li><a href="#">Career</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li>
<form class="navbar-form" role="search">
<div class="form-group">
<input type="text" class="form-control" placeholder="Search" />
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
</li>
</ul>
</div>
<!-- /.navbar-collapse -->
</div>
<!-- /.container-fluid -->
</nav>
</div>
<a href="#" class="btn btn-default" title="" id="rtl-button" data-direction="ltr"><span class="glyphicon glyphicon-indent-right"></span> RTL</a>
希望对您有所帮助:)
你可以使用这个功能
function reverseLTR(text) {
var ltrChars = 'A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02B8\u0300-\u0590\u0800-\u1FFF' + '\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF';
var r = new RegExp("[" + ltrChars + "]?", 'g');
var ltrMatches = text.match(r);
var arr = [];
var insertPlace=0;
for (var i = 0; i < text.length; i++) {
if (!ltrMatches[i].length) {//its rtl character
arr.splice(i, 0, text[i]);
insertPlace=i+1;
}
else arr.splice(insertPlace, 0, text[i]);
}
return arr.join("");
}
var text="ABאבCDY";
document.body.innerHTML=text+" converted to : "+reverseLTR(text);
试试 <bdo>
标签
<p>left-to-right.</p>
结果:从左到右。
<p><bdo dir="rtl">right-to-left.</bdo></p>
结果:.tfel-ot-thgir
在我的 html 页面中,我需要让我的文本输入接受一组特定的字母。我通过捕获按键事件并检查输入的字符是否有效来做到这一点。
这些允许的字符既取自从左到右书写的英语,也取自从右到左书写的其他几种语言。输入的每个单词可以是英语和阿拉伯语、希伯来语字母的混合。
我需要让文本框显示从右到左书写的文本(希伯来语或阿拉伯语的相同行为适用于英语)- 例如,如果我写下 -
一个
乙
א
ב
C
D
是
我希望它完全按照从右到左的顺序呈现。
设置"style:dir=rtl"
并没有解决它,它只是从右到左呈现要写的文本,但实际上并没有根据我的需要改变要呈现的英文字符的顺序。
rtl
结果是这样的:
B
一个
א
ב
是
D
C
最好的方法是什么?
编辑:
这似乎解决了我的问题:Right to left Text HTML input 尽管没有像我希望得到的那样详细解释解决方案。
你可以用 js 做到这一点
<div id="id_of_content"></div>
<script type="text/javascript">
// if updating the div in realtime then try using keypress listener to call this function
function(id_of_content) {
var text = $('#'+id_of_content).text();
var words = text.split(' ');
var result = '';
for(var j=0;j<words.length;j++) {
if(/[^a-zA-Z]/.test(words[j])) {
var temp = words[j];
var rev_word = '';
for(var i=0;i<temp.length;i++) {
rev_word += temp[temp.length-i-1]
}
result += rev_word;
}
else {
result += words[j];
}
}
$('#'+id_of_content).text(result);
}
</script>
希望这对您有所帮助
将您的文本框样式设置为:
style="direction:rtl; unicode-bidi:bidi-override;"
为什么?
当您只是设置方向性(使用 direction: rtl
)时,您在该长文本中仍然有单独的 "directional runs",每个都有自己的呈现行为。 "AB" 部分是从左到右的 运行,这就是为什么您会看到它呈现为英语单词且 B 在 A 的右侧。
添加 unicode-bidi: bidi-override
告诉浏览器忘记那些单独的 运行 并简单地从右到左一个接一个地呈现所有字符。
[添加以解决使用数据的潜在客户端应用程序]
对于使用此数据的客户端应用程序,您可以以某种方式提供字符串本身,即使这些客户端应用程序不在您的控制范围内,也可以强制它们正确显示它。
假设客户端应用程序使用 API 或某种服务访问数据(意味着您不让它们直接访问您的数据库),那么您可以添加一个名为 [=13= 的 Unicode 控制字符] (RLO) 到字符串的开头,然后再将其发送给客户端。
RLO 字符代码是 \u202E
,因此按照上面的示例,您向客户 return 生成的字符串将是:
\u202E
一个
B
א
C
D
是
大多数网络浏览器和操作系统尊重 BiDi 控制字符并应用正确的 BiDi 呈现逻辑。因此,当客户端应用程序将该字符串输出到 UI 时,底层渲染引擎应按您的预期显示该字符串。
注意:将 unicode 字符通过其十六进制代码添加到字符串中可能会因您的平台和编程语言而异。
嗯,我浏览了一些与 RTL 相关的博客和示例,并提出了以下工作示例。
在此代码切换选项中,您可以通过单击此按钮同时尝试 LTR 和 RTL -
JSfiddle:http://jsfiddle.net/vikash2402/ammajhy3/3/
下面是它的工作代码。
// Jquery, BS3 & Awesome
$('#rtl-button').click(
function () {
var src = 'http://cdnjs.cloudflare.com/ajax/libs/bootstrap-rtl/3.2.0-rc2/css/bootstrap-rtl.min.css';
if ($(this).attr('data-direction') == 'ltr') {
$('head').append('<link href=' + src + ' rel="stylesheet" id="bootstrap-rtl" />');
$(this).attr('data-direction', 'rtl');
} else { // by default we load bootstrap-rtl
$('head link[href="' + src + '"]').remove();
$(this).attr('data-direction', 'ltr');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<link href="http://cdnjs.cloudflare.com/ajax/libs/bootstrap-rtl/3.2.0-rc2/css/bootstrap-rtl.min.css" rel="stylesheet"/>
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet"/>
<script src="http://netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js"></script>
<div class="container">
<h3>Testing bootstrap RTL css overwrite</h3>
<nav class="navbar navbar-default" role="navigation">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> <span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button> <a class="navbar-brand" href="#"><span class="glyphicon glyphicon-home"></span> Home</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="#">Welcome</a></li>
<li><a href="#"><span class="glyphicon glyphicon-phone-alt"></span> Contact us</a></li>
<li><a href="#">Career</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li>
<form class="navbar-form" role="search">
<div class="form-group">
<input type="text" class="form-control" placeholder="Search" />
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
</li>
</ul>
</div>
<!-- /.navbar-collapse -->
</div>
<!-- /.container-fluid -->
</nav>
</div>
<a href="#" class="btn btn-default" title="" id="rtl-button" data-direction="ltr"><span class="glyphicon glyphicon-indent-right"></span> RTL</a>
希望对您有所帮助:)
你可以使用这个功能
function reverseLTR(text) {
var ltrChars = 'A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02B8\u0300-\u0590\u0800-\u1FFF' + '\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF';
var r = new RegExp("[" + ltrChars + "]?", 'g');
var ltrMatches = text.match(r);
var arr = [];
var insertPlace=0;
for (var i = 0; i < text.length; i++) {
if (!ltrMatches[i].length) {//its rtl character
arr.splice(i, 0, text[i]);
insertPlace=i+1;
}
else arr.splice(insertPlace, 0, text[i]);
}
return arr.join("");
}
var text="ABאבCDY";
document.body.innerHTML=text+" converted to : "+reverseLTR(text);
试试 <bdo>
标签
<p>left-to-right.</p>
结果:从左到右。
<p><bdo dir="rtl">right-to-left.</bdo></p>
结果:.tfel-ot-thgir