在android DatePickerDialog中将语言设置为法语

beg*_*ass 13 android localization datepicker

有没有办法DatePickerDialog用法语显示日期

我搜索了这个,但没有找到结果

这是我的代码:

 Calendar c = Calendar.getInstance();

 picker = new DatePickerDialog(PaymentView.this, 
                               PaymentView.this,
                   c.get(Calendar.YEAR), 
                               c.get(Calendar.MONTH),
                   c.get(Calendar.DAY_OF_MONTH));

 picker.setIcon(R.drawable.ic_launcher);
 picker.setTitle("Choisir la date");
 picker.getDatePicker().setMinDate(System.currentTimeMillis() - 2000);
Run Code Online (Sandbox Code Playgroud)

而不是星期五,2014年11月21日我希望有法语缩写我还添加了在实例化之前:

 Locale locale = new Locale("FR");
 Locale.setDefault(locale);
 Configuration config = new Configuration();
 config.locale = locale;
 getApplicationContext().getResources().updateConfiguration(config, null);
Run Code Online (Sandbox Code Playgroud)

小智 19

我做到了!

我在所有DatePickerDialog之前添加了这两行:

Locale locale = getResources().getConfiguration().locale;
Locale.setDefault(locale);
Run Code Online (Sandbox Code Playgroud)

在那之后:

Calendar c = Calendar.getInstance();
int mYear = c.get(Calendar.YEAR);
int mMonth = c.get(Calendar.MONTH);
int mDay = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dialog = new DatePickerDialog(MainActivity.this,
            this, mYear, mMonth, mDay);
dialog.getDatePicker().setMaxDate(c.getTimeInMillis());
dialog.setTitle(R.string.main_first_day_of_your_last_period);
dialog.show();
Run Code Online (Sandbox Code Playgroud)

我希望它对某人有帮助.

  • 嗨@lightbyte ,它会更改顶部显示日期,但不会更改月份名称的星期几。仍然是 M、T、W 等。 (3认同)

小智 9

您可以在之前添加此声明DatePicker:

Locale.setDefault(Locale.FRANCE);
Run Code Online (Sandbox Code Playgroud)

  • 这似乎并未翻译所有日期选择器窗口,仅翻译 **Fri, Nov 21, 2014** 标题,但不翻译月份和日期列名称。 (3认同)

Igo*_*r K 5

我有几乎类似的问题,我在这里找到了这个答案的解决方案

就我而言,我需要:

  1. initPicker(context)从链接有方法

    /**
     * Use reflection to use the Locale of the application for the month spinner.
     * 
     * PS: DAMN DATEPICKER DOESN'T HONOR Locale.getDefault()
     * <a href="http://code.google.com/p/android/issues/detail?id=25107">Bug Report</a>
     * @param context
     */
    public void initPicker(Context context) {
        String monthPickerVarName;
        String months[] =  context.getResources().getStringArray(R.array.short_months);
    
        if (Build.VERSION.SDK_INT >= 14) {
            monthPickerVarName = "mMonthSpinner";
        } else {
            monthPickerVarName = "mMonthPicker";
        }
    
        try {
            Field f[] = mDatePicker.getClass().getDeclaredFields();
    
            for (Field field : f) {
                if (field.getName().equals("mShortMonths")) {
                    field.setAccessible(true);
                    field.set(mDatePicker, months); 
                } else if (field.getName().equals(monthPickerVarName)) {
                    field.setAccessible(true);
                    Object o = field.get(mDatePicker);
                    if (Build.VERSION.SDK_INT >= 14) {
                        Method m = o.getClass().getDeclaredMethod("setDisplayedValues", String[].class);
                        m.setAccessible(true);
                        m.invoke(o, (Object)months);
                    } else {
                        Method m = o.getClass().getDeclaredMethod("setRange", int.class, int.class, String[].class);
                        m.setAccessible(true);
                        m.invoke(o, 1, 12, (Object)months);
                    }
                }
            }
    
        } catch (Exception e) {
            Log.e(TAG, e.getMessage(), e);
        }
    
        try {
            final Method updateSpinner = mDatePicker.getClass().getDeclaredMethod("updateSpinners");
            updateSpinner.setAccessible(true);
            updateSpinner.invoke(mDatePicker);
            updateSpinner.setAccessible(false);
    
    
        } catch (Exception e) {
            Log.e(TAG, e.getMessage(), e);
        }
    
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 拨打initPicker(context)电话之前,picker.init(...)在onViewCreated我的自定义窗口小部件的方法

  3. 在res/values/arrays.xml中定义short_months

    <string-array name="months_values">
        <item>Jan</item>
        <item>Feb</item>
        <item>Mar</item>
        <item>Apr</item>
        <item>May</item>
        <item>Jun</item>
        <item>Jul</item>
        <item>Aug</item>
        <item>Sep</item>
        <item>Oct</item>
        <item>Nov</item>
        <item>Dec</item>
    </string-array>
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在res/values-ru/arrays.xml中定义short_month(在这个问题中必须是模拟res/values-fr/arrays.xml)

    <string-array name="months_values">
        <item>???</item>
        <item>???</item>
        <item>???</item>
        <item>???</item>
        <item>???</item>
        <item>???</item>
        <item>???</item>
        <item>???</item>
        <item>???</item>
        <item>???</item>
        <item>???</item>
        <item>???</item>
    </string-array>
    
    Run Code Online (Sandbox Code Playgroud)

  • 嗨,伙计们,你能告诉我在你的应用程序中设置了哪个 min,目标 API,因为我得到 java.lang.NoSuchMethodException: updateSpinners [] 在这一行: final Method updateSpinner = mDatePicker.getClass().getDeclaredMethod("updateSpinners" ); (2认同)

Tob*_*run 2

相关课程:

http://developer.android.com/reference/android/app/DatePickerDialog.html http://developer.android.com/reference/android/widget/DatePicker.html http://developer.android.com/reference/ android/widget/CalendarView.html

目前,我看不到任何可能使用标准的本地化选项或重用 timepickerdialog 和 datepicker 实现来实现您自己的日历视图(您可以获取日历视图,但无法设置日历视图)。您始终可以实现自己的自定义对话框。

我还在网上找到了这个开源库。

它表明它将处理本地设置。不过还没试过。