c/c++多语言字符串格式保证参数顺序

1859次浏览

在c/c++字符串格式化还是很常用的,一般情况下也不会出现什么问题。但是,当开发多国语言的时候就会发现问题了。如:

1
format("%s对%s施放了法术-%s", a, b, c);

假设英文的一种翻译,仅做示例,语法错误勿怪。如下:

1
format("%s has been fired with %s by %s", a, b, c);

这就看出问题了,第一个的结果的是“a对b施放了法术c”,但第二个结果就是“a has been fired with b by c”,汉语就是“c对a施放了法术b,明显牛头不对马嘴。当然也有同学说了,可以在翻译的时候,来保证参数的使用顺序。如:

1
format("%s fired to %s with %s", a, b, c);

那好,英文ok了,那法语,德语,俄语,阿拉伯语呢,都能保持一致吗?显然是不可能的。

那么如何让参数自已找到正确的位置呢?很简单,c/c++里面可在格式化字符串里使用1$, 2$, 3$等表示位置。如下:

汉语:

1
format("%1$s对%2$s施放了法术-%3$s", a, b, c);

英文:

1
format("%2$s has been fired with %3$s by %1$s", a, b, c);

这样的结果就是“b has been fired with c by a”。