Определение настроек культуры числового формата - PullRequest
2 голосов
/ 16 марта 2012

У меня есть веб-страница, которая должна принимать числовой ввод, эта часть достаточно проста с некоторой комбинацией parseFloat, isNaN и (для отображения значений обратно пользователю) toFixed.Проблема в том, что Javascript, похоже, совершенно не знает о культуре.Некоторые культуры используют десятичную запятую вместо десятичной точки, но Javascript набирает это.

Поддержка десятичной запятой не составляет особых проблем, я могу просто заменить запятую на десятичную точку перед анализом ввода пользователяи я могу сделать обратное, прежде чем показывать результат пользователю.У меня вопрос, есть ли способ для Javascript знать настройки культуры пользователя?Я забочусь только о десятичном разделителе, поэтому сейчас меня не интересуют другие сложности, такие как разделители тысяч или валюта.

Существует ли надежный (на стороне клиента) способ определить, использует ли посетитель десятичную запятую, ачем десятичная точка?

Обновление

В случае, если кто-то еще этого хочет (или если кто-то может увидеть изъян - кроме того, что не работает в Chrome, как отмечалось)лучший способ), я закончил тем, что сделал это:

var useComma = (0.1).toLocaleString().indexOf(",") > 0;

Теперь useComma будет true, если пользователь установил запятую в качестве десятичного разделителя

Ответы [ 2 ]

3 голосов
/ 16 марта 2012

Я думаю, что попытка определить локаль пользователя может не сильно помочь. Если ваше веб-приложение написано на английском языке, пользователь может использовать форматирование в английском стиле (например, 1.3), даже если в его собственной культуре оно будет отформатировано иначе (1,3 для FR-FR или ES-ES)! И кто их будет винить?

Вы можете попытаться проявить смекалку и использовать решение, предложенное Alex K, и / или принять во внимание заголовок accept-language, локали, соответствующие вашей локализации (если есть), и даже GeoIP для наилучшего предположения. Но чтобы избежать путаницы, вы можете захотеть давать своим пользователям подсказки, когда вы ожидаете, что они введут цифры или даты или другие данные, чувствительные к локали .... Отображение значения по умолчанию или примера рядом с полями, отформатированными с использованием той же локали, что и вы будет использовать для анализа ввода пользователя.

Если вы считаете, что это повышает гибкость работы пользователя, вы можете использовать запасную технику и попробовать форматы, которые вы ожидаете больше всего.

2 голосов
/ 16 марта 2012

Как насчет

var decimalChar = (0.1).toLocaleString().charAt(1);

Редактировать , это не работает в Chrome Интернационализация (числовое форматирование "num.toLocaleString ()") не работает для Chrome

...