আমি কীভাবে JVM এ ডিফল্ট লোকেল সেট করব?


147

আমি Localeআমার জেভিএম এর জন্য ডিফল্ট সেট করতে চাই fr_CA। এটি করার সম্ভাব্য বিকল্পগুলি কী কী?

আমি কেবল একটি বিকল্প জানি Locale.setDefault()



উত্তর:


156

থেকে ওরাকল রেফারেন্স :

আপনার আবেদনের ডিফল্ট লোকেল তিনভাবে নির্ধারিত হয়। প্রথমত, আপনি স্পষ্টভাবে ডিফল্টটি পরিবর্তন না করলে, Locale.getDefault()পদ্ধতিটি প্রথমবার লোড করার সময় জাভা ভার্চুয়াল মেশিন (জেভিএম) দ্বারা প্রাথমিকভাবে নির্ধারিত লোকেলে ফেরত দেয়। অর্থাৎ, জেভিএম হোস্ট এনভায়রনমেন্ট থেকে ডিফল্ট লোকেল নির্ধারণ করে। হোস্ট পরিবেশের লোকেল হোস্ট অপারেটিং সিস্টেম এবং সেই সিস্টেমে প্রতিষ্ঠিত ব্যবহারকারীর পছন্দ দ্বারা নির্ধারিত হয়।

দ্বিতীয়ত, কিছু জাভা রানটাইম বাস্তবায়নের উপর, অ্যাপ্লিকেশন ব্যবহারকারীর হোস্ট এর ডিফল্ট লোকেল সেট করে কমান্ড লাইন এই তথ্য প্রদানের মাধ্যমে ওভাররাইড করতে পারে user.language, user.countryএবং user.variantসিস্টেম বৈশিষ্ট্য।

তৃতীয়ত, আপনার অ্যাপ্লিকেশনটি Locale.setDefault(Locale) পদ্ধতিটি কল করতে পারে । সেটডাফল্ট (লোকেল এলোকেলে) পদ্ধতিটি আপনার অ্যাপ্লিকেশনটিকে সিস্টেমওয়াইড (আসলে ভিএম-প্রশস্ত) সংস্থান সেট করতে দেয় । আপনি এই পদ্ধতির সাহায্যে ডিফল্ট লোকেল সেট করার পরে লোকাল.জেট ডেফল্ট () এর পরবর্তী কলগুলি নতুন সেট করা লোকেলটি ফিরিয়ে দেবে।


রিসোর্সবাণ্ডল থেকে একই লোকেলটি আনার সময় তাদের কোনও বিরোধ। আমি বান্ডিলটি আনার চেষ্টা করেছি তবে আমার প্রথমে যা ছিল তা পেয়েছি
নবদীপ সিং

153

আপনি এটি JVM পরামিতিগুলির মাধ্যমে কমান্ড লাইনে সেট করতে পারেন:

java -Duser.country=CA -Duser.language=fr ... com.x.Main

আরও তথ্যের জন্য আন্তর্জাতিকীকরণ দেখুন: জাভা প্ল্যাটফর্মে লোকাল বোঝা - লোকেল ব্যবহার করা


8
আপনি এটি _JAVA_OPTIONS এনভায়রনমেন্ট ভেরিয়েবলের মাধ্যমেও সেট করতে পারেন।
জেফ পাউকেট

2
এর মাধ্যমে জাভা 7 ডিফল্ট লোকেল :setx _JAVA_OPTIONS -Dsun.locale.formatasdefault=true /m
Vadzim


29

উত্তরের উত্তরগুলিতে, এখন অবধি, আমরা জেআরই লোকাল সেটিংটি পরিবর্তনের দুটি উপায় পেয়েছি:

  • পরীক্ষামূলকভাবে , লোকাল.সেট ডেফল্ট () ব্যবহার করা (যা আমার ক্ষেত্রে সমাধান ছিল, যেহেতু আমি ব্যবহারকারীর কোনও পদক্ষেপ নিতে চাইনি):

    Locale.setDefault(new Locale("pt", "BR"));
  • JVM- এর পক্ষে যুক্তি দিয়ে:

    java -jar anApp.jar -Duser.language=pt-BR

তবে, কেবল রেফারেন্স হিসাবে, আমি লক্ষ করতে চাই যে উইন্ডোজটিতে, জেআরই দ্বারা ব্যবহৃত লোকেল পরিবর্তনের আরও একটি উপায় রয়েছে যা এখানে নথিভুক্ত রয়েছে : সিস্টেম-ব্যাপী ভাষা পরিবর্তন করা।

দ্রষ্টব্য : আপনাকে অবশ্যই এমন একাউন্ট দিয়ে লগ ইন করতে হবে যার প্রশাসনিক অধিকার রয়েছে।

  1. শুরু> নিয়ন্ত্রণ প্যানেলে ক্লিক করুন ।

  2. উইন্ডোজ 7 এবং ভিস্তা: ক্লক, ভাষা এবং অঞ্চল> অঞ্চল এবং ভাষা ক্লিক করুন

    উইন্ডোজ এক্সপি: আঞ্চলিক এবং ভাষা বিকল্প আইকনে ডাবল ক্লিক করুন ।

    আঞ্চলিক ও ভাষা বিকল্পগুলি ডায়লগ বক্স প্রদর্শিত হবে।

  3. উইন্ডোজ 7: প্রশাসনিক ট্যাবে ক্লিক করুন ।

    উইন্ডোজ এক্সপি এবং ভিস্তা: অ্যাডভান্সড ট্যাবে ক্লিক করুন ।

    (যদি কোনও উন্নত ট্যাব না থাকে, তবে আপনি প্রশাসনিক সুযোগ-সুবিধাগুলি দিয়ে লগ ইন করেননি))

  4. ভাষাবিহীন -ইউনিকোড প্রোগ্রাম বিভাগের অধীনে, ড্রপ ডাউন মেনু থেকে পছন্দসই ভাষাটি নির্বাচন করুন।

  5. ঠিক আছে ক্লিক করুন ।

    বিদ্যমান ফাইলগুলি ব্যবহার করতে হবে বা অপারেটিং সিস্টেমের সিডি থেকে ইনস্টল করতে হবে কিনা তা জানতে এই সিস্টেমটি একটি ডায়ালগ বক্স প্রদর্শন করে। আপনার সিডি প্রস্তুত আছে তা নিশ্চিত করুন।

  6. ফাইলগুলি ইনস্টল করার জন্য গাইডেড নির্দেশাবলী অনুসরণ করুন।

  7. ইনস্টলেশন সমাপ্তির পরে কম্পিউটার পুনরায় চালু করুন।

অবশ্যই লিনাক্সে জেআরই সিস্টেমটি সেটিংস ব্যবহার করে কোন লোকেল ব্যবহার করবে তা নির্ধারণ করতে, তবে সিস্টেম-প্রশস্ত ভাষা পরিবর্তনকে ডিগ্রো থেকে ডিগ্রোতে সেট করতে নির্দেশাবলী।


2
যদিও এই তথ্যটি সহায়ক হতে পারে, আমি হাইলাইট করতে চাই যে এই পদক্ষেপগুলি প্রতিটি ওএসের থেকে আলাদা এবং প্রতিটি ওএসের জন্য, আপনি সিস্টেমের ব্যাপী ব্যবহৃত একটি লোকাল সেটআপ করতে সক্ষম হতে পারেন। জাভা সেই লোকালটিকে ডিফল্ট লোকেল হিসাবে ব্যবহার করার জন্য ডিজাইন করা হয়েছে যখনই আমরা স্পষ্টভাবে কোনও ডিফল্ট লোকেল সেট করি না। সুতরাং এই উত্তরের তথ্যটি কীভাবে জাভাতে নয় উইন্ডোগুলিতে ডিফল্ট লোকাল সেট করতে হয়।
মোজেনারথ

5

আপনি যদি সিস্টেম লোকেল পরিবর্তন করতে না চান তবে অন্যটি দূরে আছে তবে জেভিএম। আপনি একটি সিস্টেম (বা ব্যবহারকারী) পরিবেশ পরিবর্তনশীল সেটআপ করতে পারেন JAVA_TOOL_OPTIONSএবং এর মান -Duser.language=en-USবা অন্য কোনও ভাষা-অঞ্চলটি আপনি সেট করতে পারেন।


1

আপনি JARনিম্নলিখিত কোড সহ কোনও ফাইলের জন্য ভিএম যুক্তি প্রয়োগ করতে পারেন :

import java.io.File;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;

public class JVMArgumentEnforcer
{
    private String argument;

    public JVMArgumentEnforcer(String argument)
    {
        this.argument = argument;
    }

    public static long getTotalPhysicalMemory()
    {
        com.sun.management.OperatingSystemMXBean bean =
                (com.sun.management.OperatingSystemMXBean)
                        java.lang.management.ManagementFactory.getOperatingSystemMXBean();
        return bean.getTotalPhysicalMemorySize();
    }

    public static boolean isUsing64BitJavaInstallation()
    {
        String bitVersion = System.getProperty("sun.arch.data.model");

        return bitVersion.equals("64");
    }

    private boolean hasTargetArgument()
    {
        RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
        List<String> inputArguments = runtimeMXBean.getInputArguments();

        return inputArguments.contains(argument);
    }

    public void forceArgument() throws Exception
    {
        if (!hasTargetArgument())
        {
            // This won't work from IDEs
            if (JARUtilities.isRunningFromJARFile())
            {
                // Supply the desired argument
                restartApplication();
            } else
            {
                throw new IllegalStateException("Please supply the VM argument with your IDE: " + argument);
            }
        }
    }

    private void restartApplication() throws Exception
    {
        String javaBinary = getJavaBinaryPath();
        ArrayList<String> command = new ArrayList<>();
        command.add(javaBinary);
        command.add("-jar");
        command.add(argument);
        String currentJARFilePath = JARUtilities.getCurrentJARFilePath();
        command.add(currentJARFilePath);

        ProcessBuilder processBuilder = new ProcessBuilder(command);
        processBuilder.start();

        // Kill the current process
        System.exit(0);
    }

    private String getJavaBinaryPath()
    {
        return System.getProperty("java.home")
                + File.separator + "bin"
                + File.separator + "java";
    }

    public static class JARUtilities
    {
        static boolean isRunningFromJARFile() throws URISyntaxException
        {
            File currentJarFile = getCurrentJARFile();

            return currentJarFile.getName().endsWith(".jar");
        }

        static String getCurrentJARFilePath() throws URISyntaxException
        {
            File currentJarFile = getCurrentJARFile();

            return currentJarFile.getPath();
        }

        private static File getCurrentJARFile() throws URISyntaxException
        {
            return new File(JVMArgumentEnforcer.class.getProtectionDomain().getCodeSource().getLocation().toURI());
        }
    }
}

এটি নিম্নলিখিত হিসাবে ব্যবহৃত হয়:

JVMArgumentEnforcer jvmArgumentEnforcer = new JVMArgumentEnforcer("-Duser.language=pt-BR"); // For example
jvmArgumentEnforcer.forceArgument();

1

তুমি এটি করতে পারো:

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

এবং লোকেল ক্যাপচার। তুমি এটি করতে পারো:

private static final String LOCALE = LocaleContextHolder.getLocale().getLanguage()
            + "-" + LocaleContextHolder.getLocale().getCountry();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.