JavaScript для определения языковых предпочтений браузера [дубликат]

Используйте метод в классе com.google.common.io.Files, если ваш проект уже зависит от основной библиотеки Google. Вам нужен метод getNameWithoutExtension.

408
задан phihag 25 June 2009 в 11:50
поделиться

4 ответа

Я думаю, что основная проблема здесь в том, что настройки браузера фактически не влияют на свойство navigator.language , которое получается с помощью javascript.

На что они влияют, так это на HTTP-заголовок Accept-Language, но похоже, что это значение вообще недоступно через javascript. (Вероятно, почему @anddoutoi заявляет, что не может найти ссылку на него, которая не связана с серверной частью.)

Я закодировал обходной путь: я создал скрипт движка приложения Google по адресу http: / /ajaxhttpheaders.appspot.com, который вернет вам заголовки HTTP-запроса через JSONP.

(Примечание: это средство взлома, которое можно использовать только в том случае, если у вас нет серверной части, которая могла бы сделать это за вас. Как правило, вам не следует выполнять вызовы сторонних файлов javascript на своих страницах, если у вас нет очень высокий уровень доверия к хосту.)

Я намерен оставить его там на вечность, так что не стесняйтесь использовать его в своем коде.

Вот пример кода (в jQuery) того, как вы можете его использовать.

$.ajax({ 
    url: "http://ajaxhttpheaders.appspot.com", 
    dataType: 'jsonp', 
    success: function(headers) {
        language = headers['Accept-Language'];
        nowDoSomethingWithIt(language);
    }
});

Надеюсь, кто-то сочтет это полезным.

Редактировать: Я написал небольшой плагин jQuery на github, который включает в себя эту функциональность: https://github.com/dansingerman/jQuery-Browser-Language

Редактировать 2: По запросу, вот код, который работает на AppEngine (на самом деле супер-тривиально):

class MainPage(webapp.RequestHandler):
    def get(self):
        headers = self.request.headers
        callback = self.request.get('callback')

        if callback:
          self.response.headers['Content-Type'] = 'application/javascript'
          self.response.out.write(callback + "(")
          self.response.out.write(headers)
          self.response.out.write(")")
        else:
          self.response.headers['Content-Type'] = 'text/plain'
          self.response.out.write("I need a callback=")

application = webapp.WSGIApplication(
                                     [('/', MainPage)],
                                     debug=False)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()

Edit3: Открытый исходный код движка приложения: https://github.com/dansingerman/app-engine-headers

287
ответ дан 22 November 2019 в 23:20
поделиться

navigator.userLanguage для IE

window.navigator.language для firefox / opera / safari

16
ответ дан 22 November 2019 в 23:20
поделиться

Я не могу найти ни одной ссылки, в которой говорится, что это возможно без участия сервера.

MSDN на:

From browserLanguage:

В Microsoft Internet Explorer 4.0 и ранее свойство browserLanguage отражает язык установленного пользовательский интерфейс браузера. Например, если вы установите японскую версию Windows Internet Explorer на Английская операционная система, browserLanguage будет ja.

В Internet Explorer 5 и более поздних версиях однако свойство browserLanguage отражает язык операционной система независимо от установленной языковая версия Internet Explorer. Однако если Microsoft Windows 2000 Установлена ​​мультиязыковая версия, свойство browserLanguage указывает язык, установленный в операционной текущие меню и диалоговые окна системы, как можно найти в региональных вариантах Панель управления. Например, если вы установить японскую версию Интернета Explorer 5 по английскому (United Kingdom) операционная система, browserLanguage будет en-gb. если ты установить Windows 2000 MultiLanguage версия и установите язык меню и диалоги на французский язык, browserLanguage будет fr, даже хотя у вас есть японская версия Internet Explorer.

Примечание. Это свойство не указывает язык или языки, установленные пользователь в языковых настройках, расположенный в диалоговом окне «Свойства обозревателя».

Кроме того, похоже, что browserLanguage устарел, потому что IE8 не перечисляет его

7
ответ дан 22 November 2019 в 23:20
поделиться

Нет достойного способа получить эту настройку, по крайней мере, не зависящую от браузера.

Но у сервера есть эта информация, поскольку она является частью заголовка HTTP-запроса (поле Accept-Language, см. http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14 .4 )

Итак, единственный надежный способ - это получить ответ от сервера. Вам понадобится что-то, что работает на сервере (например, .asp, .jsp, .php, CGI), и эта «вещь» может возвращать эту информацию. Вот хорошие примеры: http://www.developershome.com/wap/detection/detection.asp?page=readHeader

17
ответ дан 22 November 2019 в 23:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: