在EditText中使用numberDecimal inputType的十进制分隔符逗号(',')


133

输入inputType numberDecimalEditText使用点“。”。作为小数点分隔符。在欧洲,通常使用逗号','代替。即使我的语言环境设置为德语,小数点分隔符仍为“。”。

有没有办法将逗号作为小数点分隔符?



1
此错误终于在Android O中得到修复:issuetracker.google.com/issues/36907764
Lovis

他们说这是固定的,但我不能确认是否固定?你能?
sebastian

5
我可以确认它没有得到修复,至少在运行Android 8.1(又名LineageOS 15.1)的Nexus 4上没有修复。将Settings-> Language设置为French(法国)后,带有android:inputType =“ numberDecimal”的EditText提供了“,”(逗号)分隔符,但仍拒绝接受逗号。提供的“。” (小数点)被接受。自从首次报告此错误以来已有9年了。那是某种记录吗?瘸。
皮特

Answers:


105

一种解决方法(直到Google修复此错误)是使用EditTextwith android:inputType="numberDecimal"android:digits="0123456789.,"

然后使用以下afterTextChanged将TextChangedListener添加到EditText:

public void afterTextChanged(Editable s) {
    double doubleValue = 0;
    if (s != null) {
        try {
            doubleValue = Double.parseDouble(s.toString().replace(',', '.'));
        } catch (NumberFormatException e) {
            //Error
        }
    }
    //Do something with doubleValue
}

1
@Zoombie用于在键盘上显示的逗号(,)取决于设备上设置的语言。如果您输入的数字类型为数字十进制,而您的语言为英语(美国),它将显示在Nexus设备上(参考)。非Nexus设备有可能不尊重这一点
hcpl 2014年

11
它可以工作,但是请注意,它可以让“ 24,22.55”之类的文本通过。您可能需要添加一些其他验证来解决此问题!
dimsuz 2014年

8
这仍然是要走的路吗?
威利·曼策尔

更好的是,使用char localizedSeparator = DecimalFormatSymbols.getInstance()。getDecimalSeparator();。localizedFloatString = localizedFloatString.replace('。',localizedSeparator);
萨瑟顿

4
似乎这只是将一个错误换成另一个错误。如上所述,这将对使用而不是的语言环境起作用。以相反的代价为代价,这在世界范围内更为普遍。@southerton的微调确实有帮助,但是您的用户在点击时可能会感到惊讶。并在输入中显示一个。
尼克

30

此处提供的“数字”解决方案的一种变体:

char separator = DecimalFormatSymbols.getInstance().getDecimalSeparator();
input.setKeyListener(DigitsKeyListener.getInstance("0123456789" + separator));

考虑到语言环境分隔符。


这是对原始问题最干净的答案。谢谢
peter.bartos

将其放在onCreate()中,这是方法,恕我直言。
TechNyquist

6
我喜欢这个,但是要小心...有些键盘不关心用户的语言环境,因此用户,的键盘上没有按键。示例:三星键盘(KitKat)。
布雷斯·加宾

2
这将允许重复的十进制分隔符。请参见下面的答案进行处理:stackoverflow.com/a/45384821/6138589
Esdras Lopez

19

EditText的以下代码货币掩码($ 123,125.155)

Xml布局

  <EditText
    android:inputType="numberDecimal"
    android:layout_height="wrap_content"
    android:layout_width="200dp"
    android:digits="0123456789.,$" />

EditText testFilter=...
testFilter.addTextChangedListener( new TextWatcher() {
        boolean isEdiging;
        @Override public void onTextChanged(CharSequence s, int start, int before, int count) { }
        @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { }

        @Override public void afterTextChanged(Editable s) {
            if(isEdiging) return;
            isEdiging = true;

            String str = s.toString().replaceAll( "[^\\d]", "" );
            double s1 = Double.parseDouble(str);

            NumberFormat nf2 = NumberFormat.getInstance(Locale.ENGLISH);
            ((DecimalFormat)nf2).applyPattern("$ ###,###.###");
            s.replace(0, s.length(), nf2.format(s1));

            isEdiging = false;
        }
    });

16

这是Android SDK中的已知错误。唯一的解决方法是创建自己的软键盘。您可以在此处找到实现的示例。


15
四年后有什么消息吗?
Antonio Sesto

也可以在Xamarin.Forms中体验到这一点。区域性为{se-SV},数字键盘显示的是漫游器“,”(小数点分隔符)和“”。(千位分隔符),但按“”后,在文本字段中将不会输入任何内容,也不会引发任何事件
joacar 2015年

我可以确认该错误仍然存​​在。
Lensflare

已在Android O开发人员预览版中修复
R00We

6

如果您以编程方式实例化EditText,Martins的答案将不起作用。我继续并修改了DigitsKeyListenerAPI 14中的包含类,以允许逗号和句点作为小数点分隔符。

要使用此功能,调用setKeyListener()EditText,比如

// Don't allow for signed input (minus), but allow for decimal points
editText.setKeyListener( new MyDigitsKeyListener( false, true ) );

但是,在TextChangedListener用逗号替换逗号的过程中,仍然需要使用马丁的技巧

import android.text.InputType;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.method.NumberKeyListener;
import android.view.KeyEvent;

class MyDigitsKeyListener extends NumberKeyListener {

    /**
     * The characters that are used.
     *
     * @see KeyEvent#getMatch
     * @see #getAcceptedChars
     */
    private static final char[][] CHARACTERS = new char[][] {
        new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' },
        new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-' },
        new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', ',' },
        new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '.', ',' },
    };

    private char[] mAccepted;
    private boolean mSign;
    private boolean mDecimal;

    private static final int SIGN = 1;
    private static final int DECIMAL = 2;

    private static MyDigitsKeyListener[] sInstance = new MyDigitsKeyListener[4];

    @Override
    protected char[] getAcceptedChars() {
        return mAccepted;
    }

    /**
     * Allocates a DigitsKeyListener that accepts the digits 0 through 9.
     */
    public MyDigitsKeyListener() {
        this(false, false);
    }

    /**
     * Allocates a DigitsKeyListener that accepts the digits 0 through 9,
     * plus the minus sign (only at the beginning) and/or decimal point
     * (only one per field) if specified.
     */
    public MyDigitsKeyListener(boolean sign, boolean decimal) {
        mSign = sign;
        mDecimal = decimal;

        int kind = (sign ? SIGN : 0) | (decimal ? DECIMAL : 0);
        mAccepted = CHARACTERS[kind];
    }

    /**
     * Returns a DigitsKeyListener that accepts the digits 0 through 9.
     */
    public static MyDigitsKeyListener getInstance() {
        return getInstance(false, false);
    }

    /**
     * Returns a DigitsKeyListener that accepts the digits 0 through 9,
     * plus the minus sign (only at the beginning) and/or decimal point
     * (only one per field) if specified.
     */
    public static MyDigitsKeyListener getInstance(boolean sign, boolean decimal) {
        int kind = (sign ? SIGN : 0) | (decimal ? DECIMAL : 0);

        if (sInstance[kind] != null)
            return sInstance[kind];

        sInstance[kind] = new MyDigitsKeyListener(sign, decimal);
        return sInstance[kind];
    }

    /**
     * Returns a DigitsKeyListener that accepts only the characters
     * that appear in the specified String.  Note that not all characters
     * may be available on every keyboard.
     */
    public static MyDigitsKeyListener getInstance(String accepted) {
        // TODO: do we need a cache of these to avoid allocating?

        MyDigitsKeyListener dim = new MyDigitsKeyListener();

        dim.mAccepted = new char[accepted.length()];
        accepted.getChars(0, accepted.length(), dim.mAccepted, 0);

        return dim;
    }

    public int getInputType() {
        int contentType = InputType.TYPE_CLASS_NUMBER;
        if (mSign) {
            contentType |= InputType.TYPE_NUMBER_FLAG_SIGNED;
        }
        if (mDecimal) {
            contentType |= InputType.TYPE_NUMBER_FLAG_DECIMAL;
        }
        return contentType;
    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end,
                               Spanned dest, int dstart, int dend) {
        CharSequence out = super.filter(source, start, end, dest, dstart, dend);

        if (mSign == false && mDecimal == false) {
            return out;
        }

        if (out != null) {
            source = out;
            start = 0;
            end = out.length();
        }

        int sign = -1;
        int decimal = -1;
        int dlen = dest.length();

        /*
         * Find out if the existing text has '-' or '.' characters.
         */

        for (int i = 0; i < dstart; i++) {
            char c = dest.charAt(i);

            if (c == '-') {
                sign = i;
            } else if (c == '.' || c == ',') {
                decimal = i;
            }
        }
        for (int i = dend; i < dlen; i++) {
            char c = dest.charAt(i);

            if (c == '-') {
                return "";    // Nothing can be inserted in front of a '-'.
            } else if (c == '.' ||  c == ',') {
                decimal = i;
            }
        }

        /*
         * If it does, we must strip them out from the source.
         * In addition, '-' must be the very first character,
         * and nothing can be inserted before an existing '-'.
         * Go in reverse order so the offsets are stable.
         */

        SpannableStringBuilder stripped = null;

        for (int i = end - 1; i >= start; i--) {
            char c = source.charAt(i);
            boolean strip = false;

            if (c == '-') {
                if (i != start || dstart != 0) {
                    strip = true;
                } else if (sign >= 0) {
                    strip = true;
                } else {
                    sign = i;
                }
            } else if (c == '.' || c == ',') {
                if (decimal >= 0) {
                    strip = true;
                } else {
                    decimal = i;
                }
            }

            if (strip) {
                if (end == start + 1) {
                    return "";  // Only one character, and it was stripped.
                }

                if (stripped == null) {
                    stripped = new SpannableStringBuilder(source, start, end);
                }

                stripped.delete(i - start, i + 1 - start);
            }
        }

        if (stripped != null) {
            return stripped;
        } else if (out != null) {
            return out;
        } else {
            return null;
        }
    }
}

from doc:KeyListener仅应在应用程序具有自己的屏幕小键盘并且还希望处理硬键盘事件以使其匹配的情况下使用。developer.android.com/reference/android/text/method/...
洛达

6

您可以将以下内容用于不同的语言环境

private void localeDecimalInput(final EditText editText){

    DecimalFormat decFormat = (DecimalFormat) DecimalFormat.getInstance(Locale.getDefault());
    DecimalFormatSymbols symbols=decFormat.getDecimalFormatSymbols();
    final String defaultSeperator=Character.toString(symbols.getDecimalSeparator());

    editText.addTextChangedListener(new TextWatcher() {

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable editable) {
            if(editable.toString().contains(defaultSeperator))
                editText.setKeyListener(DigitsKeyListener.getInstance("0123456789"));
            else
                editText.setKeyListener(DigitsKeyListener.getInstance("0123456789" + defaultSeperator));
        }
    });
}

这对我来说是最好的解决方案,但是某些电话(例如三星)有问题,但键盘上没有显示“,”昏迷。因此,我更改了此选项以允许同时使用
逗号

5

您可以使用以下变通办法将逗号作为有效输入包括在内:

通过XML:

<EditText
    android:inputType="number"
    android:digits="0123456789.," />

以编程方式:

EditText input = new EditText(THE_CONTEXT);
input.setKeyListener(DigitsKeyListener.getInstance("0123456789.,"));

这样,Android系统将显示数字的键盘并允许输入逗号。希望这能回答问题:)


使用此解决方案时,您点击“,”,但编辑文本显示为“。”
Mara Jimenez

2

对于Mono(Droid)解决方案:

decimal decimalValue = decimal.Parse(input.Text.Replace(",", ".") , CultureInfo.InvariantCulture);

1

您可以执行以下操作:

DecimalFormatSymbols d = DecimalFormatSymbols.getInstance(Locale.getDefault());
input.setFilters(new InputFilter[] { new DecimalDigitsInputFilter(5, 2) });
input.setKeyListener(DigitsKeyListener.getInstance("0123456789" + d.getDecimalSeparator()));

然后,您可以使用输入过滤器:

    public class DecimalDigitsInputFilter implements InputFilter {

Pattern mPattern;

public DecimalDigitsInputFilter(int digitsBeforeZero, int digitsAfterZero) {
    DecimalFormatSymbols d = new DecimalFormatSymbols(Locale.getDefault());
    String s = "\\" + d.getDecimalSeparator();
    mPattern = Pattern.compile("[0-9]{0," + (digitsBeforeZero - 1) + "}+((" + s + "[0-9]{0," + (digitsAfterZero - 1) + "})?)||(" + s + ")?");
}

@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

    Matcher matcher = mPattern.matcher(dest);
    if (!matcher.matches())
        return "";
    return null;
}

}


可能存在千百之间的空间,该模式将拒绝格式化的输入
Eric Zhao

1

恕我直言,解决此问题的最佳方法是仅使用InputFilter。一个不错的主旨是DecimalDigitsInputFilter。然后,您可以:

editText.setInputType(TYPE_NUMBER_FLAG_DECIMAL | TYPE_NUMBER_FLAG_SIGNED | TYPE_CLASS_NUMBER)
editText.setKeyListener(DigitsKeyListener.getInstance("0123456789,.-"))
editText.setFilters(new InputFilter[] {new DecimalDigitsInputFilter(5,2)});

就像魅力一样,谢谢!(上面有这么多错误的解决方法... :(),但是我有一个问题:我如何实现屏幕上显示的逗号(“,”)而不是点(“。”),因为在匈牙利,我们使用逗号作为小数点分隔符。
阿比盖尔La'Fay

1
android:digits =“ 0123456789”“设置可以添加到EditText中。而且,除了在DecimalDigitsInputFilter中返回null之外,您还可以根据答案stackoverflow.com/a/40020731/1510222返回source.replace(“。”,“,”),无法在标准键盘中隐藏点
ArkadiuszCieśliński19年

1

本地化您的输入使用:

char sep = DecimalFormatSymbols.getInstance().getDecimalSeparator();

然后添加:

textEdit.setKeyListener(DigitsKeyListener.getInstance("0123456789" + sep));

别忘了将“,”替换为“。”。因此Float或Double可以正确解析它。


1
此解决方案允许输入多个逗号
Leo Droidcoder

1

这里的所有其他帖子都存在重大漏洞,因此,以下解决方案将:

  • 根据区域强制使用逗号或句号,不允许您键入相反的逗号或句号。
  • 如果EditText以某个值开头,则会根据需要替换正确的分隔符。

在XML中:

<EditText
    ...
    android:inputType="numberDecimal" 
    ... />

类变量:

private boolean isDecimalSeparatorComma = false;

在onCreate中,找到当前语言环境中使用的分隔符:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    NumberFormat nf = NumberFormat.getInstance();
    if (nf instanceof DecimalFormat) {
        DecimalFormatSymbols sym = ((DecimalFormat) nf).getDecimalFormatSymbols();
        char decSeparator = sym.getDecimalSeparator();
        isDecimalSeparatorComma = Character.toString(decSeparator).equals(",");
    }
}

同样在onCreate上,如果要加载当前值,请使用此命令进行更新:

// Replace editText with commas or periods as needed for viewing
String editTextValue = getEditTextValue(); // load your current value
if (editTextValue.contains(".") && isDecimalSeparatorComma) {
    editTextValue = editTextValue.replaceAll("\\.",",");
} else if (editTextValue.contains(",") && !isDecimalSeparatorComma) {
    editTextValue = editTextValue.replaceAll(",",".");
}
setEditTextValue(editTextValue); // override your current value

同样在onCreate上,添加侦听器

editText.addTextChangedListener(editTextWatcher);

if (isDecimalSeparatorComma) {
    editText.setKeyListener(DigitsKeyListener.getInstance("0123456789,"));
} else {
    editText.setKeyListener(DigitsKeyListener.getInstance("0123456789."));
}

editTextWatcher

TextWatcher editTextWatcher = new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) { }

    @Override
    public void afterTextChanged(Editable s) {
        String editTextValue = s.toString();

        // Count up the number of commas and periods
        Pattern pattern = Pattern.compile("[,.]");
        Matcher matcher = pattern.matcher(editTextValue);
        int count = 0;
        while (matcher.find()) {
            count++;
        }

        // Don't let it put more than one comma or period
        if (count > 1) {
            s.delete(s.length()-1, s.length());
        } else {
            // If there is a comma or period at the end the value hasn't changed so don't update
            if (!editTextValue.endsWith(",") && !editTextValue.endsWith(".")) {
                doSomething()
            }
        }
    }
};

doSomething()示例,转换为标准时间以进行数据处理

private void doSomething() {
    try {
        String editTextStr = editText.getText().toString();
        if (isDecimalSeparatorComma) {
            editTextStr = editTextStr.replaceAll(",",".");
        }
        float editTextFloatValue = editTextStr.isEmpty() ?
                0.0f :
                Float.valueOf(editTextStr);

        ... use editTextFloatValue
    } catch (NumberFormatException e) {
        Log.e(TAG, "Error converting String to Double");
    }
}

0

Android具有内置的数字格式化程序。

您可以将其添加EditText到允许小数点和逗号的位置: android:inputType="numberDecimal"android:digits="0123456789.,"

然后在代码中的某个位置,当用户单击“保存”或在输入文本后(使用侦听器)。

// Format the number to the appropriate double
try { 
    Number formatted = NumberFormat.getInstance().parse(editText.getText().toString());
    cost = formatted.doubleValue();
} catch (ParseException e) {
    System.out.println("Error parsing cost string " + editText.getText().toString());
    cost = 0.0;
}

0

我决定只在编辑时将逗号更改为点。这是我棘手且相对简单的解决方法:

    editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            EditText editText = (EditText) v; 
            String text = editText.getText().toString();
            if (hasFocus) {
                editText.setText(text.replace(",", "."));
            } else {
                if (!text.isEmpty()) {
                    Double doubleValue = Double.valueOf(text.replace(",", "."));
                    editText.setText(someDecimalFormatter.format(doubleValue));
                }
            }
        }
    });

someDecimalFormatter将使用逗号还是点号取决于语言环境


0

我不知道为什么你的答案这么复杂。如果SDK中存在错误,则必须将其覆盖或解决。

我选择了第二种方法来解决该问题。如果将字符串格式设置为Locale.ENGLISH,然后将其放在EditText(即使是空字符串)。例:

String.format(Locale.ENGLISH,"%.6f", yourFloatNumber);

追求该解决方案,您的结果与所示键盘兼容。然后,浮点数和双数以典型的编程语言方式工作,使用点而不是逗号。


0

我的解决方案是:

  • 在主要活动中:

    char separator =DecimalFormatSymbols.getInstance().getDecimalSeparator(); textViewPitchDeadZone.setKeyListener(DigitsKeyListener.getInstance("0123456789" + separator));

  • 在xml文件中: android:imeOptions="flagNoFullscreen" android:inputType="numberDecimal"

我将editText中的double用作字符串。


0

我可以确认,建议的修复程序不适用于Samsung IME(至少在S6和S9上)以及LG。它们仍然显示点作为小数点分隔符,而不考虑语言环境。切换到Google的IME可以解决此问题,但对于大多数开发人员而言,这几乎不是一个选择。

这些键盘在Oreo中也没有得到修复,因为这是三星和/或LG必须进行的修复,然后才能推广到他们的旧手机。

相反,我派生了数字键盘项目,并添加了一个其行为类似于IME:fork的模式。有关详细信息,请参见项目示例。这对我来说效果很好,类似于您在银行应用中看到的许多“ PIN输入”假IME。

示例应用程序屏幕截图


0

已经过去8年多了,令我感到惊讶的是,这个问题尚未解决。。。
我为这个简单的问题而苦恼,因为@Martin的最高评价答案允许键入多个分隔符,即用户可以键入“ 12 ,,, ,,, 12,1,,21,2,“,
此外,第二个要注意的是,在某些设备上,数字键盘上没有显示逗号(或要求多次按下点按钮)

这是我的解决方法,它可以解决上述问题并允许用户键入“。”。和',',但是在EditText中,他将看到唯一与当前语言环境相对应的小数点分隔符:

editText.apply { addTextChangedListener(DoubleTextChangedListener(this)) }

和文本观察器:

  open class DoubleTextChangedListener(private val et: EditText) : TextWatcher {

    init {
        et.inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL
        et.keyListener = DigitsKeyListener.getInstance("0123456789.,")
    }

    private val separator = DecimalFormatSymbols.getInstance().decimalSeparator

    override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
        //empty
    }

    @CallSuper
    override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
        et.run {
            removeTextChangedListener(this@DoubleTextChangedListener)
            val formatted = toLocalizedDecimal(s.toString(), separator)
            setText(formatted)
            setSelection(formatted.length)
            addTextChangedListener(this@DoubleTextChangedListener)
        }
    }

    override fun afterTextChanged(s: Editable?) {
        // empty
    }

    /**
     * Formats input to a decimal. Leaves the only separator (or none), which matches [separator].
     * Examples:
     * 1. [s]="12.12", [separator]=',' -> result= "12,12"
     * 2. [s]="12.12", [separator]='.' -> result= "12.12"
     * 4. [s]="12,12", [separator]='.' -> result= "12.12"
     * 5. [s]="12,12,,..,,,,,34..,", [separator]=',' -> result= "12,1234"
     * 6. [s]="12.12,,..,,,,,34..,", [separator]='.' -> result= "12.1234"
     * 7. [s]="5" -> result= "5"
     */
    private fun toLocalizedDecimal(s: String, separator: Char): String {
        val cleared = s.replace(",", ".")
        val splitted = cleared.split('.').filter { it.isNotBlank() }
        return when (splitted.size) {
            0 -> s
            1 -> cleared.replace('.', separator).replaceAfter(separator, "")
            2 -> splitted.joinToString(separator.toString())
            else -> splitted[0]
                    .plus(separator)
                    .plus(splitted.subList(1, splitted.size - 1).joinToString(""))
        }
    }
}

0

简单的解决方案,使自定义控件。(这是在Xamarin android中制作的,但应轻松移植到Java)

public class EditTextDecimalNumber:EditText
{
    readonly string _numberFormatDecimalSeparator;

    public EditTextDecimalNumber(Context context, IAttributeSet attrs) : base(context, attrs)
    {
        InputType = InputTypes.NumberFlagDecimal;
        TextChanged += EditTextDecimalNumber_TextChanged;
        _numberFormatDecimalSeparator = System.Threading.Thread.CurrentThread.CurrentUICulture.NumberFormat.NumberDecimalSeparator;

        KeyListener = DigitsKeyListener.GetInstance($"0123456789{_numberFormatDecimalSeparator}");
    }

    private void EditTextDecimalNumber_TextChanged(object sender, TextChangedEventArgs e)
    {
        int noOfOccurence = this.Text.Count(x => x.ToString() == _numberFormatDecimalSeparator);
        if (noOfOccurence >=2)
        {
            int lastIndexOf = this.Text.LastIndexOf(_numberFormatDecimalSeparator,StringComparison.CurrentCulture);
            if (lastIndexOf!=-1)
            {
                this.Text = this.Text.Substring(0, lastIndexOf);
                this.SetSelection(this.Text.Length);
            }

        }
    }
}

0

您可以使用inputType="phone",但是在那种情况下,您将不得不处理多个,.存在多个,因此有必要进行额外的验证。


-1

我认为此解决方案比此处编写的其他解决方案复杂:

<EditText
    android:inputType="numberDecimal"
    android:digits="0123456789," />

这样,当您按“。”时。在软键盘上什么也没有发生。仅允许使用数字和逗号。


4
如果执行此操作,则将破坏所有使用'。'的语言环境。代替。
尼克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.