javascript - অবজ - জাভাস্ক্রিপ্ট বই pdf




ব্রাউজার ভাষা পছন্দ সনাক্ত করার জন্য জাভাস্ক্রিপ্ট (18)

DanSingerman এই প্রশ্নের জন্য একটি খুব ভাল সমাধান আছে।

ভাষার জন্য একমাত্র নির্ভরযোগ্য উৎস HTTP- অনুরোধ শিরোনাম। তাই আপনাকে অনুরোধের শিরোনাম বা কমপক্ষে Accept-Language ক্ষেত্রটি আপনার কাছে ফেরত দেওয়ার জন্য একটি সার্ভার-সাইড স্ক্রিপ্ট প্রয়োজন।

এখানে একটি খুব সহজ Node.js সার্ভার যা ড্যান্সিংার্মান jQuery প্লাগইনটির সাথে সামঞ্জস্যপূর্ণ হওয়া উচিত।

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end(JSON.stringify(req.headers));
}).listen(80,'0.0.0.0');

আমি জাভাস্ক্রিপ্ট ব্যবহার করে ব্রাউজার ভাষা পছন্দ সনাক্ত করার চেষ্টা করা হয়েছে।

আমি যদি ইন্টারনেটে ব্রাউজার ভাষাটি Tools>Internet Options>General>Languages সেট করি তবে আমি কিভাবে জাভাস্ক্রিপ্ট ব্যবহার করে এই মানটি পড়তে পারি?

ফায়ারফক্সের জন্য একই সমস্যা। navigator.language ব্যবহার করে আমি tools>options>content>languages সেটিংটি সনাক্ত করতে পারছি না।

navigator.userLanguage ব্যবহার করে, এটি Start>ControlPanel>RegionalandLanguageOptions>Regional Options ট্যাব দিয়ে সম্পন্ন সেটিংটি সনাক্ত করে।

আমি navigator.browserLanguage এবং navigator.systemLanguage navigator.browserLanguage দিয়ে পরীক্ষা করেছি কিন্তু প্রথম সেটিং ( Tools>InternetOptions>General>Languages ) এর মানটি ফেরত দেয় না

আমি একটি link খুঁজে পেয়েছি যা বিস্তারিতভাবে আলোচনা করেছে, কিন্তু প্রশ্নটি অনুপস্থিত :((


আপনি যদি ASP .NET MVC ব্যবহার করেন এবং আপনি জাভাস্ক্রিপ্ট থেকে Accepted-Languages ​​শিরোনামটি পেতে চান তবে এখানে একটি কার্যকর উদাহরণ যা কোন অ্যাসিঙ্ক্রোনাস অনুরোধগুলি অন্তর্ভুক্ত করে না।

আপনার .cshtml ফাইলের মধ্যে, শিরোনামের নিরাপদে শিরোনামের ডেটা সংরক্ষণ করুন- বৈশিষ্ট্য:

<div data-languages="@Json.Encode(HttpContext.Current.Request.UserLanguages)"></div>

তারপর আপনার জাভাস্ক্রিপ্ট কোড তথ্য অ্যাক্সেস করতে পারেন, যেমন JQuery ব্যবহার করে:

<script type="text/javascript">
$('[data-languages]').each(function () {
    var languages = $(this).data("languages");
    for (var i = 0; i < languages.length; i++) {
        var regex = /[-;]/;
        console.log(languages[i].split(regex)[0]);
    }
});
</script>

অবশ্যই অন্যান্য সার্ভার প্রযুক্তির সাথে একই রকম পদ্ধতির ব্যবহার করতে পারেন।


আপনি যদি বহিরাগত সার্ভারের উপর নির্ভর করতে চান না এবং আপনার নিজের একটিতে আপনি একটি সাধারণ পিএইচপি স্ক্রিপ্ট ব্যবহার করতে পারেন তবে @ ড্যানসিংম্যান উত্তর হিসাবে একই আচরণ অর্জন করতে পারেন।

languageDetector.php :

<?php
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
echo json_encode($lang);
?>

এবং শুধু jQuery স্ক্রিপ্ট থেকে এই লাইন পরিবর্তন:

url: "languageDetector.php",
dataType: 'json',
success: function(language) {
    nowDoSomethingWithIt(language);
}

আপনি শুধুমাত্র কিছু আধুনিক ব্রাউজার সমর্থন প্রয়োজন হলে আপনি এখন ব্যবহার করতে পারেন:

navigator.languages

যা ব্যবহারকারীর দ্বারা নির্ধারিত ক্রমের ব্যবহারকারীর ভাষা পছন্দগুলির একটি অ্যারে প্রদান করে।

এখন পর্যন্ত (সেপ্টেম্বর ২014) এটি কাজ করে: ক্রোম (v37), ফায়ারফক্স (v32) এবং অপেরা (v24)

কিন্তু না: IE (v11)


আমি এঙ্গুলার অনুবাদ মডিউলে ব্রাউজারের ভাষা সনাক্ত করতে কোডের এই অংশটি জুড়ে এসেছি, যা আপনি here উৎস খুঁজে পেতে পারেন। আমি এঙ্গেল লাইব্রেরির থেকে স্বাধীন করার জন্য Array.isAray এর সাথে angular.isArray প্রতিস্থাপন করে কোডটি সামান্য পরিবর্তন করেছি।

var getFirstBrowserLanguage = function () {
    var nav = window.navigator,
    browserLanguagePropertyKeys = ['language', 'browserLanguage', 'systemLanguage', 'userLanguage'],
    i,
    language;

    // support for HTML 5.1 "navigator.languages"
    if (Array.isArray(nav.languages)) {
      for (i = 0; i < nav.languages.length; i++) {
        language = nav.languages[i];
        if (language && language.length) {
          return language;
        }
      }
    }

    // support for other well known properties in browsers
    for (i = 0; i < browserLanguagePropertyKeys.length; i++) {
      language = nav[browserLanguagePropertyKeys[i]];
      if (language && language.length) {
        return language;
      }
    }

    return null;
  };

console.log(getFirstBrowserLanguage());


আমি একটি diffrent পদ্ধতির ছিল, এই ভবিষ্যতে কেউ সাহায্য করতে পারে:

গ্রাহক একটি পৃষ্ঠা চেয়েছিলেন যেখানে আপনি ভাষা পরিবর্তন করতে পারেন। আমি যে সেটিং দ্বারা নম্বর বিন্যাস করতে হবে (কোন পূর্বনির্ধারিত সেটিং দ্বারা নয় ব্রাউজার সেটিং / না)

তাই আমি কনফিগারেশন সেটিংস (i18n) উপর নির্ভর করে একটি প্রাথমিক সেটিং সেট

$clang = $this->Session->read('Config.language');
echo "<script type='text/javascript'>var clang = '$clang'</script>";

পরে স্ক্রিপ্টে আমি কোন ফাংশন ব্যবহার করেছিলাম তা নির্ধারণ করতে আমি কোন ফাংশন ব্যবহার করেছি

function getLangsettings(){
  if(typeof clang === 'undefined') clang = navigator.language;
  //console.log(clang);
  switch(clang){
    case 'de':
    case 'de-de':
        return {precision : 2, thousand : ".", decimal : ","}
    case 'en':
    case 'en-gb':
    default:
        return {precision : 2, thousand : ",", decimal : "."}
  }
}

তাই আমি পৃষ্ঠাটির সেট ভাষা ব্যবহার করেছি এবং একটি ফালব্যাক হিসাবে আমি ব্রাউজার সেটিংস ব্যবহার করেছি।

যা পরীক্ষার উদ্দেশ্যে asl জন্য সহায়ক হতে হবে।

আপনার গ্রাহকদের উপর নির্ভর করে আপনাকে সেই সেটিংস প্রয়োজন হবে না।


আমি কিছু সময়ের জন্য হামিদ এর উত্তর ব্যবহার করছি, কিন্তু এটি এমন ক্ষেত্রে যেখানে ভাষা অ্যারের ["এন", "এন-জিবি", "এন-ইউএস", "ফ্রা-আরআর", "ফ্র", "এন" -জেএ "] এটি" এন "ফিরে আসবে, যখন" এন-জিবি "একটি ভাল ম্যাচ হবে।

আমার আপডেট (নীচে) প্রথম দীর্ঘ বিন্যাস কোড যেমন "এন-জিবি" প্রদান করবে, নাহলে এটি প্রথম শর্ট কোড যেমন "en" প্রদান করবে, নাহলে এটি নল ফিরে আসবে।

function getFirstBrowserLanguage() {
        var nav = window.navigator,
            browserLanguagePropertyKeys = ['language', 'browserLanguage', 'systemLanguage', 'userLanguage'],
            i,
            language,
            len,
            shortLanguage = null;

        // support for HTML 5.1 "navigator.languages"
        if (Array.isArray(nav.languages)) {
            for (i = 0; i < nav.languages.length; i++) {
                language = nav.languages[i];
                len = language.length;
                if (!shortLanguage && len) {
                    shortLanguage = language;
                }
                if (language && len>2) {
                    return language;
                }
            }
        }

        // support for other well known properties in browsers
        for (i = 0; i < browserLanguagePropertyKeys.length; i++) {
            language = nav[browserLanguagePropertyKeys[i]];
            len = language.length;
            if (!shortLanguage && len) {
                shortLanguage = language;
            }
            if (language && len > 2) {
                return language;
            }
        }

        return shortLanguage;
    }

console.log(getFirstBrowserLanguage());


আমি মনে করি এখানে প্রধান সমস্যা হল ব্রাউজার সেটিংস আসলে navigator.language সম্পত্তিকে জাভাস্ক্রিপ্টের মাধ্যমে প্রাপ্ত নয়।

তারা কীভাবে HTTP 'Accept-Language' শিরোনামটি প্রভাবিত করে তবে এটি প্রদর্শিত হয় যে এই মানটি জাভাস্ক্রিপ্টের মাধ্যমে উপলব্ধ নয়। (সম্ভবতঃ @anddoutoi বলেছেন কেন সে তার জন্য একটি রেফারেন্স খুঁজে পাচ্ছেন না যা সার্ভারের পাশে নেই।)

আমি একটি ওয়ার্কারাউন্ড কোডেড করেছি: আমি http://ajaxhttpheaders.appspot.com এ একটি গুগল অ্যাপ্লিকেশন ইঞ্জিন স্ক্রিপ্ট খারিজ করেছি যা আপনাকে JSONP এর মাধ্যমে HTTP অনুরোধ শিরোনামগুলি ফিরিয়ে দেবে।

(দ্রষ্টব্য: এটি কেবলমাত্র একটি হ্যাক ব্যবহার করা হবে যদি আপনার কাছে ব্যাক ব্যাক শেষ না থাকে যা এটি আপনার জন্য করতে পারে। সাধারণভাবে আপনি আপনার পৃষ্ঠাগুলিতে তৃতীয় পক্ষের হোস্ট হওয়া জাভাস্ক্রিপ্ট ফাইলগুলিতে কল করতে পারবেন না যতক্ষণ না আপনার খুব উচ্চ হোস্ট বিশ্বাসের স্তর।)

আমি চিরস্থায়ী সেখানে এটি ছেড়ে ইচ্ছা তাই আপনার কোড এটি ব্যবহার করতে বিনা দ্বিধায়।

এখানে আপনি কীভাবে এটি ব্যবহার করতে পারেন তার জন্য কিছু উদাহরণ কোড (jQuery তে)

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

কেউ এই দরকারী খুঁজে বের করে আশা করি।

সম্পাদনা করুন: আমি জিথুব-এ একটি ছোট jQuery প্লাগইন লিখেছি যা এই কার্যকারিতাটি আবৃত করে: https://github.com/dansingerman/jQuery-Browser-Language ব্রাউজার -ভাষা

সম্পাদনা 2: এখানে অনুরোধ করা কোডটি অ্যাপেঞ্জাইন (অতি তুচ্ছ সত্যিই) -এ চলমান কোড:

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()

সম্পাদনা 3: এখানে অ্যাপ ইঞ্জিন কোডটি খোলা আছে: https://github.com/dansingerman/app-engine-headers


আমি সার্ভারাইড জড়িত ছাড়া এটি সম্ভব যে একটি একক রেফারেন্স খুঁজে পাচ্ছি না।

এমএসডিএন:

ব্রাউজার ভাষা থেকে:

মাইক্রোসফ্ট ইন্টারনেট এক্সপ্লোরার 4.0 এবং এর আগে, ব্রাউজারভাষা সম্পত্তি ইনস্টল ব্রাউজারের ব্যবহারকারী ইন্টারফেসের ভাষা প্রতিফলিত করে। উদাহরণস্বরূপ, যদি আপনি একটি ইংরেজী অপারেটিং সিস্টেমে উইন্ডোজ ইন্টারনেট এক্সপ্লোরারের একটি জাপানি সংস্করণ ইনস্টল করেন তবে ব্রাউজারভাষাটি হবে।

ইন্টারনেট এক্সপ্লোরার 5 এবং পরবর্তীতে, ইন্টারনেট ব্রাউজারের ইনস্টল থাকা ভাষা সংস্করণটি নির্বিশেষে ব্রাউজার ভাষাভাষার অপারেটিং সিস্টেমের ভাষা প্রতিফলিত করে। যাইহোক, যদি মাইক্রোসফ্ট উইন্ডোজ 2000 মাল্টিভাঙ্গেজ সংস্করণ ইনস্টল করা থাকে তবে ব্রাউজারভাঙ্গার সম্পত্তিটি নিয়ন্ত্রণ প্যানেলের আঞ্চলিক বিকল্পগুলিতে পাওয়া অপারেটিং সিস্টেমের বর্তমান মেনু এবং ডায়ালগগুলিতে ভাষা সেটকে নির্দেশ করে। উদাহরণস্বরূপ, যদি আপনি একটি ইংরেজী (যুক্তরাজ্য) অপারেটিং সিস্টেমে ইন্টারনেট এক্সপ্লোরার 5 এর জাপানি সংস্করণ ইনস্টল করেন তবে ব্রাউজারভাষা এন-জিবি হবে। আপনি যদি উইন্ডোজ 2000 মাল্টিভাঙ্গেজ সংস্করণটি ইনস্টল করেন এবং ফ্রেঞ্চে মেনু এবং ডায়ালগগুলির ভাষা সেট করেন তবে ব্রাউজারভাষাটি হ'ল, যদিও আপনার কাছে ইন্টারনেট এক্সপ্লোরারের জাপানি সংস্করণ রয়েছে।

দ্রষ্টব্য এই সম্পত্তিটি ইন্টারনেট বিকল্প কথোপকথন বাক্সে অবস্থিত ভাষা পছন্দগুলিতে ব্যবহারকারী দ্বারা নির্ধারিত ভাষা বা ভাষাগুলিকে নির্দেশ করে না।

উপরন্তু, মনে হচ্ছে browserLanguage হয়েছে কারণ IE8 এটি তালিকাভুক্ত করে না


উইকিমিডিয়া এর সর্বজনীন ভাষা নির্বাচক লাইব্রেরির জন্য এটি কী মূল্যবান? https://www.mediawiki.org/wiki/Extension:UniversalLanguageSelector

ফাংশনটি দেখুন / ফ্রী / ext.uls.init.js এ ফ্রীফন্টেন্টভাষালিস্টটি দেখুন। সরাসরি লিঙ্ক: https://gerrit.wikimedia.org/r/gitweb?p=mediawiki/extensions/UniversalLanguageSelector.git;a=blob;f=resources/js/ext.uls.init.js;hb=HEAD

এটি এখনও সার্ভারের উপর নির্ভর করে, বা আরো বিশেষভাবে, মিডিয়াওয়িকি API। আমি এটি দেখানোর কারণটি হল এটি ব্যবহারকারীর ভাষা সম্পর্কে ব্রাউজার ভাষা, অ্যাক্সেস-ল্যাঙ্গুয়েজ, জিওলোকেশন (CLDR থেকে দেশ / ভাষা তথ্য পাওয়ার সাথে সাথে) সম্পর্কে সমস্ত দরকারী তথ্য পাওয়ার একটি ভাল উদাহরণ সরবরাহ করতে পারে এবং অবশ্যই, ব্যবহারকারীর নিজস্ব সাইট পছন্দ।


জাভা সার্ভার সমাধান খুঁজছেন যারা জন্য

এখানে Resteasy হয়

@GET
@Path("/preference-language")
@Consumes({"application/json", "application/xml"})
@Produces({"application/json", "application/xml"})
public Response getUserLanguagePreference(@Context HttpHeaders headers) {
    return Response.status(200)
            .entity(headers.getAcceptableLanguages().get(0))
            .build();
}

জাভাস্ক্রিপ্ট উপায়:

var language = window.navigator.userLanguage || window.navigator.language;//returns value like 'en-us'

আপনি jQuery.i18n প্লাগিন ব্যবহার করছেন , আপনি ব্যবহার করতে পারেন:

jQuery.i18n.browserLang();//returns value like '"en-US"'

বছরের আপডেট 2014।

এখন ফায়ারফক্সে অ্যাক্সেস-ভাষা এবং navigator.languages ল্যাঙ্গুয়েজ ব্যবহার করে ক্রোম পেতে একটি উপায় রয়েছে (ক্রোমে কাজ করে => 32 এবং ফায়ারফক্স> = 32)

এছাড়াও, ফায়ারফক্সে navigator.language এই বছরগুলি UI এর ভাষা নয় বরং সামগ্রীগুলির সর্বাধিক পছন্দের ভাষা প্রতিফলিত করে। কিন্তু এই ধারণাটি এখনও অন্যান্য ব্রাউজার দ্বারা সমর্থিত নয়, এটি খুব দরকারী নয়।

সুতরাং, যখন সম্ভব হয় তখন সর্বাধিক পছন্দসই সামগ্রী ভাষা পেতে এবং ফাল্যাকব হিসাবে UI ভাষা ব্যবহার করুন:

navigator.languages
    ? navigator.languages[0]
    : (navigator.language || navigator.userLanguage)

যদি আপনার ব্যাকএন্ডের নিয়ন্ত্রণ থাকে এবং django ব্যবহার করে থাকেন তবে ড্যানের ধারণাটির 4 লাইন বাস্তবায়ন হল:

def get_browser_lang(request):
if request.META.has_key('HTTP_ACCEPT_LANGUAGE'):
    return JsonResponse({'response': request.META['HTTP_ACCEPT_LANGUAGE']})
else:
    return JsonResponse({'response': settings.DEFAULT_LANG})

তারপর urls.py:

url(r'^browserlang/$', views.get_browser_lang, name='get_browser_lang'),

এবং সামনে শেষ:

$.get(lg('SERVER') + 'browserlang/', function(data){
    var lang_code = data.response.split(',')[0].split(';')[0].split('-')[0];
});

(আপনাকে অবশ্যই অবশ্যই সেটিংস-তে DEFAULT_LANG সেট করতে হবে)


সর্বোপরি, আমার ইংরেজি জন্য আমাকে ক্ষমা। আমি আমার কোড শেয়ার করতে চাই, কারণ এটি কাজ করে এবং এটি অন্যকে দেওয়া মঞ্চগুলির চেয়ে আলাদা। এই উদাহরণে, আপনি যদি ফ্রেঞ্চ (ফ্রান্স, বেলজিয়াম বা অন্য ফ্রেঞ্চ ভাষা) বলতে থাকেন তবে ব্রাউজার কনফিগারেশনের উপর নির্ভর করে আপনাকে ফ্রেঞ্চ পৃষ্ঠাতে পাঠানো হয়, অন্যথায় ইংরেজি পৃষ্ঠাতে:

<script type="text/javascript">
        $(document).ready(function () {
            var userLang = navigator.language || navigator.userLanguage;
            if (userLang.startsWith("fr")) {
                    window.location.href = '../fr/index.html';
                }
            else {
                    window.location.href = '../en/index.html';
                }
            });
    </script>


navigator.userLanguage জন্য IE ভাষা

ফায়ারফক্স / অপেরা / সাফারি জন্য window.navigator.language


var language = window.navigator.userLanguage || window.navigator.language;
alert(language); //works IE/SAFARI/CHROME/FF

window.navigator.userLanguage শুধুমাত্র IE এবং এটি উইন্ডোজ কন্ট্রোল প্যানেল - আঞ্চলিক বিকল্পগুলি এবং ব্রাউজারের ভাষাতে কোনও ভাষা সেট নয় তবে আপনি মনে করতে পারেন যে কোনও ব্যবহারকারী ফ্রান্সে সেট করা উইন্ডো আঞ্চলিক সেটিংস সহ একটি মেশিন ব্যবহার করে সম্ভবত একজন ফ্রেঞ্চ ব্যবহারকারী।

navigator.language ফায়ারফক্স এবং অন্যান্য অন্যান্য ব্রাউজার।

কিছু ভাষা কোড: 'it' = ইতালি, 'en-US' = ইংরেজি মার্কিন ইত্যাদি।

RCoup এবং WebMacheter দ্বারা নিচের মতামতগুলিতে উল্লেখ করা হয়েছে, ব্যবহারকারীরা যখন IE ব্যতীত ব্রাউজারে ওয়েবসাইট দেখছেন তখন এই ভাষাগুলি আপনাকে ইংরেজী উপভাষার মধ্যে বৈষম্য দেয় না।

window.navigator.language (ক্রোম / এফএফ / সাফারি) সর্বদা ব্রাউজারের ভাষা এবং ব্রাউজারের পছন্দের ভাষা নয়, এটি ফেরত দেয় তবে: "এটি ফায়ারফক্সের এন-উই সংস্করণ রাখার জন্য ইংরেজি ভাষাভাষীদের (জিবি, অ, এনজে, ইত্যাদি) একেবারে সাধারণ। ক্রোম / সাফারি। " তাই window.navigator.language en-GB থাকলেও window.navigator.language en-US ফিরে আসবে।


<script type="text/javascript">
var lang = window.navigator.languages ? window.navigator.languages[0] : null;
    lang = lang || window.navigator.language || window.navigator.browserLanguage || window.navigator.userLanguage;
if (lang.indexOf('-') !== -1)
    lang = lang.split('-')[0];

if (lang.indexOf('_') !== -1)
    lang = lang.split('_')[0];
</script>

আমি শুধুমাত্র আমার প্রয়োজনের জন্য প্রাথমিক উপাদান প্রয়োজন, কিন্তু আপনি সহজেই শুধুমাত্র সম্পূর্ণ স্ট্রিং ব্যবহার করতে পারেন। সর্বশেষ ক্রোম, ফায়ারফক্স, সাফারি এবং IE10 + সঙ্গে কাজ করে।






internationalization