[系统设计,求思路]国际化字符串变量替换问题

时间:2021-07-13 00:23:19
现在是:
程序中使用code 对照 xml中的中文或者英文的字符串资源。

有时会遇到xml中的字符串有动态变量的地方,例如:{0}和{1}不是好友,{0}{1}是用户真实姓名。
系统后台管理程序中要有对这些字符串更改的功能。

场景1:比如改成用户的昵称,用户的代号等。
场景2:比如增加了动态变量,{0},{1},{2}不是好友。
场景3:比如更复杂一点的字符串的句意都改变了,{0}不存在。{0}有可能已经不是用户对象了。

像第三种场景,本身后台代码里是引用了用户对象在替换或者格式化字符串,那句意更改后,对象也会变。怎么破。

分数不多,忘大神们告知。

8 个解决方案

#1


xml格式可以修改的话  xml上在属性或者项目把变量单独拿出来  约定好  

#2


引用 1 楼 yanbuodiao 的回复:
xml格式可以修改的话  xml上在属性或者项目把变量单独拿出来  约定好  


主对象:用于替换或格式化字符串的对象。

您好,那假设xml的变量提出来为这种格式:
<item variable="{0}=object.name{1}=object.age" value="{0}和{1}不是好友" />
程序根据variable属性来确定取主对象的那个属性字段解决了,这种办法可以解决第一种和第二种场景的问题。
第三种场景是整个句意发生变化了,变成{0}文件不存在。 此时主对象原来是用户对象,现在变成文件对象了。
要是在xml要是再提现出来对象的名称,可以解决,但是就不灵活了,后台编辑人员还需要知道程序里定义的对象名称或者对象的代号。

求大神详细解释。

#3


引用 1 楼 yanbuodiao 的回复:
xml格式可以修改的话  xml上在属性或者项目把变量单独拿出来  约定好  


@烟波钓  求详细解释啊, 大神

#4


看了半天都不知道你在说什么,也许是我水平太差了。

#5


什么叫“字符串有动态变量”?

xml 语法树对象在 .net 中可以使用 XmlDocument 类对象实例,这就好像 Newtonsoft.Json 框架中使用 JObject 和 JArray 来表示 json 语法树一样。而字符串是与外界输入输出时的静态字符串,那本身是静态的,跟有知识的语法分析结果是两回事。能创建强类型的动态语法对象,自然就能强类型的按照业务需求去动态处理此对象的生成。这跟你所说的“字符串”没有关系。

你可能学过软件较长时间了,但是没有学明白。踏实点,走正规编程开发之路,不要对于底层概念(例如“字符串”)去玩儿什么不一样的东西,要从高级一些的对象类型上去重新学习编程。

#6


引用 4 楼 wddw1986 的回复:
看了半天都不知道你在说什么,也许是我水平太差了。


想做国际化,然后遇到点问题。
目前我的实现方式是, code=string
但是string中可能存在动态的变量赋值,比如有时候string="{0}和{1}不是好友。"
此时用到这段字符串的程序需要格式化这段字符串,需要两个参数。假设写程序时直接传入两个变量,分别是用户对象的A的真实姓名属性和B的真实姓名属性。
然后,后台管理部分可以更新这些个字符串,管理人员想让这两个变量显示用户的昵称。 这是场景一的问题。
场景二是有时候后台管理人员会再加一个变量就变成了“{0}{1}{2}”3个变量了,这时候程序就出问题了。不是只传两个参数了。
场景三是有时候后台管理人员把整个字符串的意思都改掉了,比如改成了“{0}文件不存在”,这时候又变成了一个变量,且已经不是用户对象的属性了,变成文件对象的属性了。

我想请教大神们这种问题,怎么能弄的通用一点, 也就是怎么定义一种规范,能适应这几种场景,
比如xml中的每个字符串节点都增加一个属性,指定变量用的是那个对象的那个属性,但是这种又太死,不能满足第三种场景,
看2楼

#7


@cheng2005  您再看看这次能明白我的意思吗? 感谢

#8


定义和数据是相互对应的,而不是和逻辑。
简单点说,如果你的数据像是字典里的每个字,那么你可以随意的根据定义把任意数据取出来,这种情况下,你定义的格式如何变化都无所谓,因为你能拿到所有数据。
但是,如果你的数据是通过一个第三者来获取的,比如有一只猴子,它会给你固定的几个字,那么在这种情况下,你使用数据的方式其实就固定了,定义也就不能更改了,你想多要一个字,就必然要教会猴子如何去取那个字。

#1


xml格式可以修改的话  xml上在属性或者项目把变量单独拿出来  约定好  

#2


引用 1 楼 yanbuodiao 的回复:
xml格式可以修改的话  xml上在属性或者项目把变量单独拿出来  约定好  


主对象:用于替换或格式化字符串的对象。

您好,那假设xml的变量提出来为这种格式:
<item variable="{0}=object.name{1}=object.age" value="{0}和{1}不是好友" />
程序根据variable属性来确定取主对象的那个属性字段解决了,这种办法可以解决第一种和第二种场景的问题。
第三种场景是整个句意发生变化了,变成{0}文件不存在。 此时主对象原来是用户对象,现在变成文件对象了。
要是在xml要是再提现出来对象的名称,可以解决,但是就不灵活了,后台编辑人员还需要知道程序里定义的对象名称或者对象的代号。

求大神详细解释。

#3


引用 1 楼 yanbuodiao 的回复:
xml格式可以修改的话  xml上在属性或者项目把变量单独拿出来  约定好  


@烟波钓  求详细解释啊, 大神

#4


看了半天都不知道你在说什么,也许是我水平太差了。

#5


什么叫“字符串有动态变量”?

xml 语法树对象在 .net 中可以使用 XmlDocument 类对象实例,这就好像 Newtonsoft.Json 框架中使用 JObject 和 JArray 来表示 json 语法树一样。而字符串是与外界输入输出时的静态字符串,那本身是静态的,跟有知识的语法分析结果是两回事。能创建强类型的动态语法对象,自然就能强类型的按照业务需求去动态处理此对象的生成。这跟你所说的“字符串”没有关系。

你可能学过软件较长时间了,但是没有学明白。踏实点,走正规编程开发之路,不要对于底层概念(例如“字符串”)去玩儿什么不一样的东西,要从高级一些的对象类型上去重新学习编程。

#6


引用 4 楼 wddw1986 的回复:
看了半天都不知道你在说什么,也许是我水平太差了。


想做国际化,然后遇到点问题。
目前我的实现方式是, code=string
但是string中可能存在动态的变量赋值,比如有时候string="{0}和{1}不是好友。"
此时用到这段字符串的程序需要格式化这段字符串,需要两个参数。假设写程序时直接传入两个变量,分别是用户对象的A的真实姓名属性和B的真实姓名属性。
然后,后台管理部分可以更新这些个字符串,管理人员想让这两个变量显示用户的昵称。 这是场景一的问题。
场景二是有时候后台管理人员会再加一个变量就变成了“{0}{1}{2}”3个变量了,这时候程序就出问题了。不是只传两个参数了。
场景三是有时候后台管理人员把整个字符串的意思都改掉了,比如改成了“{0}文件不存在”,这时候又变成了一个变量,且已经不是用户对象的属性了,变成文件对象的属性了。

我想请教大神们这种问题,怎么能弄的通用一点, 也就是怎么定义一种规范,能适应这几种场景,
比如xml中的每个字符串节点都增加一个属性,指定变量用的是那个对象的那个属性,但是这种又太死,不能满足第三种场景,
看2楼

#7


@cheng2005  您再看看这次能明白我的意思吗? 感谢

#8


定义和数据是相互对应的,而不是和逻辑。
简单点说,如果你的数据像是字典里的每个字,那么你可以随意的根据定义把任意数据取出来,这种情况下,你定义的格式如何变化都无所谓,因为你能拿到所有数据。
但是,如果你的数据是通过一个第三者来获取的,比如有一只猴子,它会给你固定的几个字,那么在这种情况下,你使用数据的方式其实就固定了,定义也就不能更改了,你想多要一个字,就必然要教会猴子如何去取那个字。