2011-02-05 2 views
33

Предположим, вы хотите сохранить локаль пользовательских предпочтений в базе данных, какое значение вы будете использовать?ru_US или en-US, какой из них вы должны использовать?

en_US или EN-US

Они два стандарта, но вы предпочитаете использовать как часть вашего собственного приложения?

Обновлено: Кажется, многие веб-сайты используют тире вместо подчеркивания, например.

http://zh.wikipedia.org/zh-tw http://www.google.com.hk/search?hl=zh-TW

ответ

41

Подождите, подождите, подождите. Ребята, я уверен, что «-» - это стандарт. Если вы видите «_» где-то, вероятно, что-то некоторые люди придумали, чтобы сделать его действительным идентификатором.

Лично я бы пошел с «-», чтобы быть прав.

http://en.wikipedia.org/wiki/IETF_language_tag

http://tools.ietf.org/html/rfc5646

+1

Да, «-» - это стандарт, даже я использую Java, я буду следовать стандарту. (http://www.w3.org/TR/html401/struct/dirlang.html) – Howard

+5

@Howard Um, вам понадобятся имена локалей в формате 'en_US' каждый раз, когда вы создаете объект' Locale'. (Для форматирования валюты, форматирования даты и т. Д.) Хранение данных в формате 'en-US' и замена тире с символами подчеркивания каждый раз, когда вам нужно использовать сохраненные данные, будет абсолютно * работать *, но может быть мудрее (и, конечно, проще) для хранения имен локалей в формате, используемом вашим приложением ... – dkarp

+6

@dkarp Использование [Locale # toLanguageTag()] (http://docs.oracle.com/javase/7/docs/api/java/util /Locale.html#toLanguageTag()) и [Locale # forLanguageTag()] (http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html#forLanguageTag (java.lang. String)) будет делать трюк (в JDK 1.7, хотя). – viphe

6

en_US. This - очень полезное чтение.

+0

К сожалению, Oracle удалил или переместил эту статью. –

+1

Да, извините, downvoting, поскольку статья ушла. – ebruchez

+0

@ebruchez вместо голосования, вы можете просто оставить комментарий, и я могу обновить ссылку или удалить ответ. Это ответ на два с половиной года. Спасибо, что поймал его. – CoolBeans

1

Я не думаю, что en-US является стандартом для Java. (Если вы видите его где-нибудь, вы можете добавить ссылку).

Так что просто используйте en_US.

+0

Как показано, существует много вариантов, но официальным стандартом является знак подчеркивания. При обращении к фреймворкам с различными соглашениями у вас есть «pratfall» кодера, которому необходимо знать, что требуется преобразование. рекомендуется использовать соглашение о структуре, с которой вы звоните. Когда вы совершаете вызовы в другую структуру, укажите «прокси», которые выполняют преобразование. Почему? это устраняет необходимость знать, что вызываемая структура использует другое соглашение. Авторы будут ТОЛЬКО «видеть» одно соглашение, используя это, чтобы избежать плутов. – DaBlick

17

Если вы работаете с Java, вы также можете использовать Java locale format (en_US).

Документы BCP 47 действительно определяют формат en-US, и это так же распространено, если не более распространено, чем имена языкового стиля в Java. Но на практике вы увидите форму с подлодкой совсем немного. Например, как Java, так и most POSIX-type platforms используют подставку для своего разделителя языка/региона.

Таким образом, вы не можете ошибиться ни с одним из вариантов. Но, учитывая, что вы пишете на Java и, возможно, ориентируетесь на платформу Unix, вероятно, путь к успеху - en_US.

+0

Я лично даже не помню, чтобы увидеть используемую версию подчеркивания. Тем не менее, я не работаю с Java. –

+1

Да, но на его вопрос есть тег 'java'. Посмотрите ссылки в моем ответе, если хотите ... – dkarp

+0

Хмм, ну, вы правы о платформах nix как минимум. Забыл. –

8

В Java 7, есть новый метод Locale.forLanguageTag(String), который предполагает дефис в качестве разделителя. Я бы счел это нормативным.

Для получения дополнительной информации проверьте документацию Locale.