我想表示一个具有多个文本属性的对象,每个属性都代表相同的文本值但使用不同的语言。万一用户修改了单个字段,其他字段应该修改,我正在考虑在其他字段的字符串开头添加单个Unicode字符,然后检查需要注意的字段,我只是必须检查 处的值obj.text_prop[0]
。
我可以为此目的使用哪个 Unicode 字符?理想情况下,它是不可打印的,受 JS 和 JSON 支持。
我想表示一个具有多个文本属性的对象,每个属性都代表相同的文本值但使用不同的语言。万一用户修改了单个字段,其他字段应该修改,我正在考虑在其他字段的字符串开头添加单个Unicode字符,然后检查需要注意的字段,我只是必须检查 处的值obj.text_prop[0]
。
我可以为此目的使用哪个 Unicode 字符?理想情况下,它是不可打印的,受 JS 和 JSON 支持。
这种标记应该以其他方式在字符级别以外的协议级别完成。例如,考虑使每个语言版本都成为一个对象,而不仅仅是一个字符串;needsAttention
除了包含字符串的属性之外,该对象还可以具有其他属性。
但如果您需要将此类信息嵌入到字符串中,则可以使用零宽度空间 U+200B。因此,这意味着换行机会,但这不应该在这里打扰。主要问题可能是旧版本的 IE 可能会将其显示为一个小矩形。
或者,您可以使用非字符代码点,例如 U+FFFF,如果您可以确保在不删除此代码点的情况下永远不会从程序的任何地方发送字符串。如 Ch 中所述。Unicode 标准、特殊区域和格式字符中的 16 个,非字符代码点保留供应用程序内部使用,绝不能在文本交换中使用。
我建议你不要在行首使用奇怪的字符。你可以实现这样的事情:
<script type="text/javascript">
function LocalizationSet(){};
LocalizationSet.prototype.localizationItems = [];
LocalizationSet.prototype.itemsNeedAttention = [];
LocalizationSet.prototype.setLocalization = function(langId, text)
{
this.localizationItems[langId] = text;
this.itemsNeedAttention[langId] = true;
}
LocalizationSet.prototype.getLocalization = function(langId)
{
return this.localizationItems[langId];
}
LocalizationSet.prototype.needsAttention = function(langId)
{
if(this.itemsNeedAttention[langId] == null)
{
return false;
}
return this.itemsNeedAttention[langId];
}
LocalizationSet.prototype.unsetAttentionFlags = function()
{
for(var it in this.itemsNeedAttention)
{
this.itemsNeedAttention[it] = false;
}
}
//Example
var set = new LocalizationSet();
set.setLocalization("en","Hello");
set.setLocalization("de","Willkommen");
alert(set.needsAttention("en"));
alert(set.needsAttention("de"));
set.unsetAttentionFlags();
alert(set.needsAttention("en"));
set.setLocalization("en","Hi");
alert(set.needsAttention("en"));
//Shows true,true,false,true
</script>