diff --git a/res/values/strings.xml b/res/values/strings.xml
index 942c59e..a2db20a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -15,26 +15,6 @@
   ~ limitations under the License
   -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- The digit to be displayed on the 0 key of the dialpad [TRANSLATE FOR FA ONLY] [CHAR LIMIT=1]-->
-    <string name="dialpad_0_number">0</string>
-    <!-- The digit to be displayed on the 1 key of the dialpad [TRANSLATE FOR FA ONLY] [CHAR LIMIT=1]-->
-    <string name="dialpad_1_number">1</string>
-    <!-- The digit to be displayed on the 2 key of the dialpad [TRANSLATE FOR FA ONLY] [CHAR LIMIT=1]-->
-    <string name="dialpad_2_number">2</string>
-    <!-- The digit to be displayed on the 3 key of the dialpad [TRANSLATE FOR FA ONLY] [CHAR LIMIT=1]-->
-    <string name="dialpad_3_number">3</string>
-    <!-- The digit to be displayed on the 4 key of the dialpad [TRANSLATE FOR FA ONLY] [CHAR LIMIT=1]-->
-    <string name="dialpad_4_number">4</string>
-    <!-- The digit to be displayed on the 5 key of the dialpad [TRANSLATE FOR FA ONLY] [CHAR LIMIT=1]-->
-    <string name="dialpad_5_number">5</string>
-    <!-- The digit to be displayed on the 6 key of the dialpad [TRANSLATE FOR FA ONLY] [CHAR LIMIT=1]-->
-    <string name="dialpad_6_number">6</string>
-    <!-- The digit to be displayed on the 7 key of the dialpad [TRANSLATE FOR FA ONLY] [CHAR LIMIT=1]-->
-    <string name="dialpad_7_number">7</string>
-    <!-- The digit to be displayed on the 8 key of the dialpad [TRANSLATE FOR FA ONLY] [CHAR LIMIT=1]-->
-    <string name="dialpad_8_number">8</string>
-    <!-- The digit to be displayed on the 9 key of the dialpad [TRANSLATE FOR FA ONLY] [CHAR LIMIT=1]-->
-    <string name="dialpad_9_number">9</string>
     <!--  Do not translate. -->
     <string name="dialpad_star_number">*</string>
     <!--  Do not translate. -->
diff --git a/src/com/android/phone/common/dialpad/DialpadView.java b/src/com/android/phone/common/dialpad/DialpadView.java
index fdce6f7..2500f98 100644
--- a/src/com/android/phone/common/dialpad/DialpadView.java
+++ b/src/com/android/phone/common/dialpad/DialpadView.java
@@ -38,6 +38,8 @@
 import com.android.phone.common.R;
 import com.android.phone.common.animation.AnimUtils;
 
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
 import java.util.Locale;
 
 /**
@@ -115,12 +117,6 @@
     }
 
     private void setupKeypad() {
-        final int[] numberIds = new int[] {R.string.dialpad_0_number, R.string.dialpad_1_number,
-                R.string.dialpad_2_number, R.string.dialpad_3_number, R.string.dialpad_4_number,
-                R.string.dialpad_5_number, R.string.dialpad_6_number, R.string.dialpad_7_number,
-                R.string.dialpad_8_number, R.string.dialpad_9_number, R.string.dialpad_star_number,
-                R.string.dialpad_pound_number};
-
         final int[] letterIds = new int[] {R.string.dialpad_0_letters, R.string.dialpad_1_letters,
                 R.string.dialpad_2_letters, R.string.dialpad_3_letters, R.string.dialpad_4_letters,
                 R.string.dialpad_5_letters, R.string.dialpad_6_letters, R.string.dialpad_7_letters,
@@ -133,11 +129,30 @@
         TextView numberView;
         TextView lettersView;
 
+        final Locale currentLocale = resources.getConfiguration().locale;
+        final NumberFormat nf;
+        // We translate dialpad numbers only for "fa" and not any other locale
+        // ("ar" anybody ?).
+        if ("fa".equals(currentLocale.getLanguage())) {
+            nf = DecimalFormat.getInstance(resources.getConfiguration().locale);
+        } else {
+            nf = DecimalFormat.getInstance(Locale.ENGLISH);
+        }
+
         for (int i = 0; i < mButtonIds.length; i++) {
             dialpadKey = (DialpadKeyButton) findViewById(mButtonIds[i]);
             numberView = (TextView) dialpadKey.findViewById(R.id.dialpad_key_number);
             lettersView = (TextView) dialpadKey.findViewById(R.id.dialpad_key_letters);
-            final String numberString = resources.getString(numberIds[i]);
+
+            final String numberString;
+            if (mButtonIds[i] == R.id.pound) {
+                numberString = resources.getString(R.string.dialpad_pound_number);
+            } else if (mButtonIds[i] == R.id.star) {
+                numberString = resources.getString(R.string.dialpad_star_number);
+            } else {
+                numberString = nf.format(i);
+            }
+
             final RippleDrawable rippleBackground =
                     (RippleDrawable) getContext().getDrawable(R.drawable.btn_dialpad_key);
             if (mRippleColor != null) {
