2017-07-03 81 views
-4

您如何本地化不是字符串的东西?例如,具有价值的硬币。C#非字符串本地化

美国

,有5枚基本的硬币:

Dollar: 1.00 
Quarter :.25 
Dime: .10 
Nickel: .05 
Penny: .01 

但在加拿大,有7:

Toonie: 2.00 
Loonie: 1.00 
Half Dollar: .50 
Dollar: 1.00 
Quarter :.25 
Dime: .10 
Nickel: .05 
Penny: .01 

什么是本地化这样的事情的最好方法?

+0

资源文件可能包含字符串以外的其他对象。 – Joey

+1

他们在加拿大说“en-CA”,呃。和“fr-CA”,oui。 –

回答

1

首先,l10n和i18n必须覆盖的不仅仅是字符串,例如,图标和图像可能与区域设置相关。因此,您可以将任意非字符串数据放入资源中。

在特定情况下,我只是把列表转换为字符串和定位是:

en-US 1,Dollar;.25,Quarter;.1,Dime;.05,Nickel;.01,Penny 
en-CA 2,Toonie;1,Loonie;1,Dollar;.5,Half Dollar;... 

,然后解析该字符串,并建立自己的硬币面值的名单。你的代码显然已经能够处理任意这样的列表。

+0

想像序列化json的对象是可以接受的吗?还是会被认为“太重”? – KevinA

+1

这完全没问题。资源存储的内容并不重要,但更多的是如何处理它。每次遇到硬币值时,反序列化/解析资源字符串的效率会很低。选择的方法应该是只反序列化/解析一次然后缓存它。因为无论如何您需要有一个处理这种“复杂”资源的服务方法(即这里的服务方法需要一个硬币值并返回本地硬币文本),这可以透明地完成。 – ckuri