我正在尝试本地化我的Web API的响应。
我在项目中创建了一个资源文件(Messges.resx),其中包含所有本地化的字符串。并使用Accept-Language标头来识别用户的语言。
在响应中,我可以将字符串设置为:
response = Messages.KEY_GOOD_MORNING
它将以当前线程区域性的语言获取该名称的字符串。我将不得不将线程的当前文化更改为从Accept-Language标头中找到的文化。但是我不想更改线程的区域性,因为这也会更改数字/日期格式,这对我来说是有问题的。
我看到的另一种选择是-使用ResourceManager并将文化作为-
Messages.ResourceManager.GetString("KEY_GOOD_MORNING", CultureInfo.CreateSpecificCulture(lang.value))
这样,我就不必更改线程的区域性。但是这种方法的问题是-字符串名称不再安全。传递给GetString()的字符串名称中的错字可能会导致返回空值。
我是否可以采用其他方法来避免上述两个问题?
首先,您应该检查此msdn讨论
为解决此问题的最佳方法。您应该在web.config文件中设置全球化设置。
<configuration>
<system.web>
<globalization
enableClientBasedCulture="true|false"
requestEncoding="any valid encoding string"
responseEncoding="any valid encoding string"
fileEncoding="any valid encoding string"
responseHeaderEncoding = "any valid encoding string"
resourceProviderFactoryType = string
enableBestFitResponseEncoding = "true|false"
culture="any valid culture string"
uiCulture="any valid culture string"/>
对于英国文化案例
<globalization
enableClientBasedCulture="false"
uiCulture="en-US"
culture="en-US" />
这样,您就可以将文化线程与config一起使用。另外,您可以将culturethread设置为浏览器设置为auto,可以将其设置为auto并忽略某些情况。有关更多信息,您可以检查上面的链接。
如果您想接受浏览器的文化
<globalization
enableClientBasedCulture="true"
uiCulture="auto"
culture="auto" />
或使用默认操作
<globalization
enableClientBasedCulture="true"
uiCulture="auto:en-US"
culture="auto:en-US" />
为了获得最佳实践,请不要更改计算机线程的区域性信息。但是您可以更改基于会话的更改,更改当前的线程文化,这只是基于线程的信息,而不是整个系统。我希望它会有用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句