我尝试用大括号解决语言问题。
我有一张桌子,我填充td
就像:
<td>{{item.biz_name + ' \(' + item.id + '\)'}}</td>
其中biz_name
可能是希伯来语或英语。
默认情况下,我为所有表格行设置了样式direction: rtl;
。如果我改为ltr
,我会得到结果反之亦然。
我找到了一些信息HERE,但它对我没什么帮助。
解决方法是更改包含英文字符的特定ng-style
的样式(td
)。
所以它应该是一些if
声明:如果Eng =&gt;另外设置样式ltr
rtl
。
如何通过角度实现这一目标?
谢谢,
这是 Fiddle (见第19行)
[编辑]
在IE9-10中运行良好,但在Chrome中运行不正确
答案 0 :(得分:2)
这与Angular无关。
这与parens(和括号)没有固有的“方向”这一事实有关。因此,当浏览器渲染文本RTL时,它不知道它在另一侧运行的第一个paren的方向,因为它没有被方向字符(单词字符)包围,所以它将它跳转到另一侧并且“反映”它(翻转它)。
所以,你需要让浏览器知道你的方向......你可以这样做两种方式:
在HTML中使用LRM字符:
<div style="direction:rtl">Some Value (test)‎</div>
使用CSS样式:
<style>
.left-to-right-marked:after {
content: "\200E";
}
</style>
<div style="direction:rtl">
<span class="left-to-right-marked">Some Value (test)</span>
</div>
任何一方都可以。
Here is an updated Fiddle, that's working with the fix
编辑:在Angular上,我建议ng-bind="myValue"
使用{{myValue}}
而不是{{1}},除非是为了防止可能发生的“加载闪烁”用户正在等待模块引导。
答案 1 :(得分:1)
我不知道这个css direction
属性是如何运作的,我也不知道希伯来语,但我认为这应该有所帮助。
我在相关的td
元素中添加了ng-class。
<td ng-class="{hebrew: !english(item.biz_name)}">{{item.biz_name + ' \(' + item.id + '\)'}}</td>
我在范围中添加了以下功能:
$scope.english = function(string) {
return string.match(/[a-zA-Z]+/);
};
这适用于包含非拉丁字符的所有item.biz_name
值的希伯来语类。
答案 2 :(得分:1)
首先,使用过滤器
从文本中获取方向fessmodule.filter('direction', function () {
return function (text) {
return text.match(/^[a-z]/i) ? 'ltr' : 'inherit';
}
});
其次,将该过滤器用于ng-style
<td ng-style="{direction:(item.biz_name|direction)}" ...