javascript中从右向左区域设置的Concat字符串

javascript中从右向左区域设置的Concat字符串,javascript,internationalization,right-to-left,Javascript,Internationalization,Right To Left,似乎+不是处理JavaScript中字符串串联的正确操作符。处理ltr和rtl两种情况的替代方法有哪些?问题是,+根本不是连接字符串的正确运算符。或者可能是这样,但是连接字符串是一个国际化错误 与其简单地将它们串联起来,还不如对它们进行格式化。因此,您实际上应该做的是使用占位符: var somePattern = "This language is written {0}."; var someMessage = somePattern.format("LTR"); 这样,译者就可以对句子重

似乎+不是处理JavaScript中字符串串联的正确操作符。处理ltr和rtl两种情况的替代方法有哪些?

问题是,+根本不是连接字符串的正确运算符。或者可能是这样,但是连接字符串是一个国际化错误

与其简单地将它们串联起来,还不如对它们进行格式化。因此,您实际上应该做的是使用占位符:

var somePattern = "This language is written {0}.";
var someMessage = somePattern.format("LTR");
这样,译者就可以对句子重新排序,包括词序。我相信它解决了你的问题

对于格式化函数,请允许我引用:


编辑:添加有关方向性标记的信息。
有时,当您有多个占位符时,您可能会失去对字符串方向的控制,即,
{0}/{1}
仍将显示为first/second,而不是所需的second/last。要解决这个问题,您需要向模式添加强方向性标记,即
{0}&rlm/{1} 
<代码>&rlm是一个HTML实体,解析为Unicode代码点U+200F,即从右到左的强方向性标记。

实际上,假设两个字符串都是本地化的,并且您希望右侧的字符串逻辑上显示在左侧的字符串之后,那么
+
有时可以正常工作。阿拉伯语等语言的字符串应该在屏幕上显示为RTL(从右到左),但字符顺序在内存中仍然是LTR(从左到右)。因此,
+
运算符在逻辑上是一致的,用于生成任何语言中术语的“有序列表”

但也有一些情况下,
+
无法正确解决问题。在某些情况下,正确的解决方案是遵循包含语言的语法。例如,你真的在阿拉伯语句子中嵌入了一个英语单词吗?反之亦然?无论如何,这里的解决方案是进行字符串格式化,其中包含本地化语句的外部术语有一个占位符,如
{0}

第三种情况是,如果没有语法关系,因为它只是两个独立的句子呢?在这种情况下,没有正确的顺序。例如,如果您在阿拉伯语句子前面显示一个英语句子。说英语的人可能会读LTR(先读左句,然后读右句)的句子。说阿拉伯语的人可能会读RTL的句子。不管怎样,每个人都不清楚作者打算按什么顺序来读这些句子

如果(rtl){result=a+b;}否则{result=b+a;}就足够了。@Juhana:他/她的(?)问题是,对于从右到左书写的语言来说,在右手边连接一些单词是不合适的——这会改变意思,看起来很奇怪。
String.prototype.format = function() {
    var args = arguments;

    return this.replace(/\{(\d+)\}/g, function() {
        return args[arguments[1]];
    });
};