Qua*_*noi 72 html locale internationalization
我正在开发一个Web应用程序.
我需要正确显示一些十进制数据,以便可以将其复制并粘贴到GUI不受我控制的某个应用程序中.
GUI应用程序是区域设置敏感的,它只接受在系统中设置的正确的小数分隔符.
我可以猜测小数分隔符Accept-Language和猜测在95%的情况下是正确的,但有时它会失败.
有没有办法在服务器端(最好是我可以收集统计数据),或在客户端?
更新:
任务的重点是自动完成.
事实上,这个webapp是一种传统GUI的在线界面,有助于正确填写表单.
使用它的用户大多不知道小数分隔符是什么.
该Accept-Language解决方案的实施和工作,但我想改善它.
UPDATE2:
我需要检索一个非常具体的设置:小数分隔符设置Control Panel / Regional and Language Options / Regional Options / Customize.
我处理四种操作系统:
所有100%的客户都在俄罗斯,遗留申请涉及俄罗斯政府发布的表格,因此要求一个国家将收取100%的俄罗斯联邦,GeoIP将收益80%的俄罗斯联邦和20%的其他(不正确)答案.
Chr*_*sen 117
这是一个简单的JavaScript函数,它将返回此信息.在Firefox,IE6和IE7中测试过.我必须在每次更改控制面板/区域和语言选项/区域选项/自定义下的设置之间关闭并重新启动浏览器.然而,它不仅包括逗号和句号,还包括古怪的自定义内容,如字母"a".
function whatDecimalSeparator() {
var n = 1.1;
n = n.toLocaleString().substring(1, 2);
return n;
}
Run Code Online (Sandbox Code Playgroud)
function whatDecimalSeparator() {
var n = 1.1;
n = n.toLocaleString().substring(1, 2);
return n;
}
console.log('You use "' + whatDecimalSeparator() + '" as Decimal seprator');Run Code Online (Sandbox Code Playgroud)
这有帮助吗?
询问用户,不要猜.在您的Web应用程序中设置它.
编辑添加:
我认为可以猜测默认设置是否正常,比如95%的时间.我的意思是用户应该仍然能够覆盖软件所做的任何猜测.当软件试图太聪明并且不允许纠正时,我已经沮丧太多次了.
可以使用检索当前或给定语言环境的分隔符Intl.NumberFormat#formatToParts.
function getDecimalSeparator(locale) {
const numberWithDecimalSeparator = 1.1;
return Intl.NumberFormat(locale)
.formatToParts(numberWithDecimalSeparator)
.find(part => part.type === 'decimal')
.value;
}
Run Code Online (Sandbox Code Playgroud)
它仅适用于支持Intl API的浏览器.否则它需要Intl polyfill
例子:
> getDecimalSeparator()
"."
> getDecimalSeparator('fr-FR')
","
Run Code Online (Sandbox Code Playgroud)
奖金:
我们可以扩展它以检索给定语言环境的小数或组分隔符:
function getSeparator(locale, separatorType) {
const numberWithGroupAndDecimalSeparator = 1000.1;
return Intl.NumberFormat(locale)
.formatToParts(numberWithGroupAndDecimalSeparator)
.find(part => part.type === separatorType)
.value;
}
Run Code Online (Sandbox Code Playgroud)
例子:
> getSeparator('en-US', 'decimal')
"."
> getSeparator('en-US', 'group')
","
> getSeparator('fr-FR', 'decimal')
","
> getSeparator('fr-FR', 'group')
" "
Run Code Online (Sandbox Code Playgroud)
小智 7
function getDecimalSeparator() {
//fallback
var decSep = ".";
try {
// this works in FF, Chrome, IE, Safari and Opera
var sep = parseFloat(3/2).toLocaleString().substring(1,2);
if (sep === '.' || sep === ',') {
decSep = sep;
}
} catch(e){}
return decSep;
}
Run Code Online (Sandbox Code Playgroud)
小智 7
为什么不
0.1.toLocaleString().replace(/\d/g, '')Run Code Online (Sandbox Code Playgroud)
我可以从Accept-Language中猜出小数分隔符,并且在95%的情况下猜测是正确的,但有时它会失败.
这是IMO最好的行动方案.为了处理故障,请添加一个链接以在显示区域旁边手动设置.
使用其他人的答案,我编译了以下小数点和千位分隔符实用函数:
var decimalSeparator = function() {
return (1.1).toLocaleString().substring(1, 2);
};
var thousandSeparator = function() {
return (1000).toLocaleString().substring(1, 2);
};
Run Code Online (Sandbox Code Playgroud)
享受!
| 归档时间: |
|
| 查看次数: |
38900 次 |
| 最近记录: |