Android strings.xml resource - arabic language and dynamic formatted strings - android

Hello I have a question about arabic formatting how should I properly format this strings, it seems i can't manage this:
تحميل %1$s…
تم تحميل الكلمات. %1$d/%2$d!
This is in sublime text 2 - but i think that there is Left-to-Right order
EDITED:
In Eclipse this copied from Sublime Text gets messed up a little. I hire some person to translate from english to arabic strings.xml. He used Word editor but things get messed up when coping to eclipse and I suggested to changed it in Sublime Text, that I think will support it correctly like in Eclipse and is lighter editor. I see that in Sublime Text seems to be in Left-To-Right order which is also wrong.
* When I run app with this messed up special characters it seems to run correctly. Bu I have doubt whether some interpunction words hasn't also messed up and for example: Item 5/10 has been downloaded. will be Item has been downloaded. 5/10 or something like this.*
Need a preferred way to get someone english written strings.xml, get this translated, and then copied into /values-ar and working correctly?

Try adding a RIGHT-TO-LEFT MARK character (\u200F) at the start of your text.
similar type answered here

That is a sublime issue with Right-to-Left languages as listed here. You dont have to worry too much about it because it does not affect the results, your app will show it perfectly.

"To solve this problem, use the unicodeWrap() method, found in the BidiFormatter class, on every piece of text that you insert into a localized message."
Quoted from here https://developer.android.com/training/basics/supporting-devices/languages.html#FormatText

You have to use Arabic Font like:
Typeface face = Typeface.createFromAsset(this.getAssets(), "fonts/arabic_letters.TTF");
yourTextView = (TextView) findViewById(R.id.yourTextVIew);
yourTextView.setTypeface(face, Typeface.BOLD);

Related

Android RTL translation with placeholders

I’m trying to edit my android strings.xml file with arabic translations. However, I’m having issues. For example, I have something like this:
<string name="test">اختبار</string>
When I type something like %1$s to add a placeholder, the string with the placeholder is also mixed up.
What’s the right approach to do this? Thanks
Placeholders (ascii) in BiDi strings are tricky. If you know that this %1$s will eventually be substituted by a name in Arabic, it's manageable; but if the substitution can be English or mixed text, you need a long and careful QA to check all special cases.
Don't try to edit Arabic text in Android Studio text editor for file res/values-ar/strings.xml; use the Translations Editor instead.
The official guide https://developer.android.com/studio/write/translations-editor.html describes the this editor in great detail, but one little trick that it misses is the use of View/BiDi Text Direction menu. To work with Arabic strings, you want to set it to Right-to-Left.
This will not effect the Arabic column in your Editor, and not even the way the translation is displayed in the text box at the bottom:
But when you click the ... button for translation, you will get the translation in RTL:
Now you can understand how your placeholder(s) will look when replaced with actual data.

Android app icon with image + text?

Let me specify the problem first.
My app is designed for text mainly in Hindi, and I want to target Android OS below 4.1, which doesn't support hindi characters(yes, I've tried various Hindi fonts, which don't work properly, or the desired outcome is not the expected one).
So, I've prepared icons with hindi text, and all works perfectly fine now.
The problem left with is, how can I specify hindi text for the launcher icon?
I've tried to specify hindi text by creating an image with hindi text, and left the application:label ="" and activity:label="" blank.
But the text doesn't appear in where the app name should have appeared, or apparently I didn't create the image correctly.
Any help in this regard would be appreciated :)
I hope you already have tried Krutidev (Hindi Font), if not you can try it.
Though it may late to answer now, but as i read this now, i would like to answer since I did the same in my application in the following way:
1. Just in application tag of your app's manifest, give app name as normal:
android:label="#string/app_name"
2. in resource file strings.xml, add a string 'app_name' with the name your want for your app. Be careful, what i did was: i typed the text using Google transliteration and i gave this in Hindi.
3. Then when you save your strings.xml, it will ask you to save this in proper encoding, then choose 'utf-8', and that's it.

what happen if do not put text files in string.xml in android?

i did not put some text in string.xml and there is a yellow alert symbol in side of Textview field. i want to know does it have problem and what happen, if do not put texts in string.xml in android?
Well, setting your text directly on your layout file can be a source of future problems and its not recommended.
Consider this scenario: You use the same string "Foo" in many layout files and then you decided to change to "Bar". If you have hardcoded that, you will need to make changes in all layout files and there might be a chance to leave some inconsistent text. But if you place it in the strings.xml file, you will have only to change in one place.
Also, if you want to add translations to your app, the Android system can handle it automatically for you if you use the strings.xml.
You might want to take a look here and here.
Nothing will happen.
string.xml used to:
localization
res/values-fr/strings.xml
res/values-ja/strings.xml
ease of editing and to save memory when reusing.
I Recommend you to put text files in string.xml
Whilst it will not cause a problem in the short term, it is not good practice and will cause you issues in the future if you decide to support multiple languages.

Break Arabic Font

I am making android app in which I have to give support of Arabic text to those mobiles in which Arabic is not present.
I successfully did this in widgets(textview, button etc) by adding following code.
I ahve added dejavusans.ttf file in assests folder.
and in code I added
TypeFace typeFace = Typeface.createFromAsset(context.getAssets(), "dejavusans.ttf");
fieldName.setTypeface(typeFace);
fieldName.setText(ArabicUtilities.reshape(resources.getString(R.string.bring_financial_arabic)));
But the problem is with WebView. The text of webView is breaking. I saw different solutions including How to change font face of Webview in Android?. But no one is working fine.
Here is the snapshot.
The title(TextView) is looking fine but the webpage text is breaking.
If anyone know its answer then please help.
Thanks
I found a solution of this problem.
I used the following tool http://www.arabic-keyboard.org/photoshop-arabic/
I pasted my arabic in it and copy the result then I pasted the result in my html file. The result is like this.
Although it is not 100 percent accurate but it is much better than previous one.
U can use adobe indesign for your arabic text and after paste all paragraph text to indesign , you should copy, then paste to photoshop from adobe indesign, every texts will be Okay.

Text align problem when using Arabic font

The screenshot below displays my problem.
The first EditText shows a hint in Arabic which is shifted upwards, now the second EditText is just for reference which shows the English version completely fine. Same goes for the Button.
I have declared the string in strings.xml like this:
<string name="ar_login">دخول</string>
This is how I set the EditText's hint:
UserName.setTypeface(ArabicFont);
String hint = getString(R.string.ar_HintUserName);
....
UserName.setHint(hint);
UPDATE:
I used this, but of no use:
UserName.setGravity(Gravity.CENTER_VERTICAL);
But with this, Text moved a little down; but i guess its not generic:
UserName.setPadding(0,15,0,0);
With Padding, English words move to downwards.
UPDATE 2:
Originally arabic texts are separated; means they are shown letter by letter. So to join them, i was using this Arabic Reshaper. To Download Code, Check this link
Now when i reshape the arabic text and then set on TextView or as EditText's Hint, it got shifted upwords but without reshaping it is fine.
So i guess, whether i have to change the reshape class OR make my textview to not split the word. But dont know where to go?
I am still unable to find out why Android splits the arabic words into separate letters anyhow in my second edit I am providing a link which uses a class to rejoin the separated letters and form a word again.
In the reshape function, it was mistakenly appending \n at the end, just removing it solves the problem.
I am sure its problem with the font file which you are using.!
[Sorry I am not allowed to upload the screen shot as my reputations are lower :(]
For the layout, I was setting text in xml, and typeface in code. And I'm not setting any attributes like padding/gravity. But it was working fine for me.
So, I can assure you that using font file whose style matches your requirement will solve your problem.
Just to help you out with, but 'm not sure I got font file from DroidSansFallback.ttf
Just a guess :) ...,
What if the size of the Arabic font is lower? [If this is the case, then Gravity.CENTER_VERTICAL should have worked for you :( ]
May be this is the style of that font file. How about trying a different font file for Arabic text ?

Categories

Resources