К сожалению, персидский язык не поддерживается на уровне API ниже 11, и он не отображается в правильном формате. Как я могу решить эту проблему?Как использовать не поддерживаемый язык в android
ответ
К сожалению, вы не можете использовать что-то, что не поддерживается в этом API. Мое предложение состояло в том, чтобы увеличить минимальный целевой API до 11. Невозможно обойти такую вещь.
Что касается неё, оно отображается на link.
Соответствующая информация от Ответ:
1) На первом добавить «TAHOMA.TTF» в папке активов
2) использовать следующий класс, чтобы получить шрифт и преобразование вашего арабский или фарси текст в хорошей форме для показа в вашей деятельности.
import android.content.Context;
import android.graphics.Typeface;
public final class Farsi {
public static boolean isFarsiConversionNeeded = true;
private final static String szLamAndAlef = Character
.toString((char) 0xfedf)
+ Character.toString((char) 0xfe8e); // Lam + Alef
private final static String szLamStickAndAlef = Character
.toString((char) 0xfee0)
+ Character.toString((char) 0xfe8e); // Lam (Sticky !!!)+
// Alef
private final static String szLa = Character.toString((char) 0xfefb); // La
private final static String szLaStick = Character.toString((char) 0xfefc); // La
// (Sticky!!!)
private final static String szLamAndAlefWoosim = Character
.toString((char) 0xe1)
+ Character.toString((char) 0xbb); // Lam + Alef
private final static String szLamStickAndAlefWoosim = Character
.toString((char) 0x90)
+ Character.toString((char) 0xbb); // Lam (Sticky !!!)+
// Alef
private final static String szLaWoosim = Character.toString((char) 0xd9); // La
private final static String szLaStickWoosim = Character
.toString((char) 0xd9); // La
// (Sticky!!!)
private static final class struc {
public char character;
public char endGlyph;
public char iniGlyph;
public char midGlyph;
public char isoGlyph;
public struc(char Character, char EndGlyph, char IniGlyph,
char MidGlyph, char IsoGlyph) {
character = Character;
endGlyph = EndGlyph;
iniGlyph = IniGlyph;
midGlyph = MidGlyph;
isoGlyph = IsoGlyph;
}
}
static struc[] arrStruc = {
new struc((char) 0x630, (char) 0xfeac, (char) 0xfeab,
(char) 0xfeac, (char) 0xfeab),
new struc((char) 0x62f, (char) 0xfeaa, (char) 0xfea9,
(char) 0xfeaa, (char) 0xfea9),
new struc((char) 0x62c, (char) 0xfe9e, (char) 0xfe9f,
(char) 0xfea0, (char) 0xfe9d),
new struc((char) 0x62d, (char) 0xfea2, (char) 0xfea3,
(char) 0xfea4, (char) 0xfea1),
new struc((char) 0x62e, (char) 0xfea6, (char) 0xfea7,
(char) 0xfea8, (char) 0xfea5),
new struc((char) 0x647, (char) 0xfeea, (char) 0xfeeb,
(char) 0xfeec, (char) 0xfee9),
new struc((char) 0x639, (char) 0xfeca, (char) 0xfecb,
(char) 0xfecc, (char) 0xfec9),
new struc((char) 0x63a, (char) 0xfece, (char) 0xfecf,
(char) 0xfed0, (char) 0xfecd),
new struc((char) 0x641, (char) 0xfed2, (char) 0xfed3,
(char) 0xfed4, (char) 0xfed1),
new struc((char) 0x642, (char) 0xfed6, (char) 0xfed7,
(char) 0xfed8, (char) 0xfed5),
new struc((char) 0x62b, (char) 0xfe9a, (char) 0xfe9b,
(char) 0xfe9c, (char) 0xfe99),
new struc((char) 0x635, (char) 0xfeba, (char) 0xfebb,
(char) 0xfebc, (char) 0xfeb9),
new struc((char) 0x636, (char) 0xfebe, (char) 0xfebf,
(char) 0xfec0, (char) 0xfebd),
new struc((char) 0x637, (char) 0xfec2, (char) 0xfec3,
(char) 0xfec4, (char) 0xfec1),
new struc((char) 0x643, (char) 0xfeda, (char) 0xfedb,
(char) 0xfedc, (char) 0xfed9),
new struc((char) 0x645, (char) 0xfee2, (char) 0xfee3,
(char) 0xfee4, (char) 0xfee1),
new struc((char) 0x646, (char) 0xfee6, (char) 0xfee7,
(char) 0xfee8, (char) 0xfee5),
new struc((char) 0x62a, (char) 0xfe96, (char) 0xfe97,
(char) 0xfe98, (char) 0xfe95),
new struc((char) 0x627, (char) 0xfe8e, (char) 0xfe8d,
(char) 0xfe8e, (char) 0xfe8d),
new struc((char) 0x644, (char) 0xfede, (char) 0xfedf,
(char) 0xfee0, (char) 0xfedd),
new struc((char) 0x628, (char) 0xfe90, (char) 0xfe91,
(char) 0xfe92, (char) 0xfe8f),
new struc((char) 0x64a, (char) 0xfef2, (char) 0xfef3,
(char) 0xfef4, (char) 0xfef1),
new struc((char) 0x633, (char) 0xfeb2, (char) 0xfeb3,
(char) 0xfeb4, (char) 0xfeb1),
new struc((char) 0x634, (char) 0xfeb6, (char) 0xfeb7,
(char) 0xfeb8, (char) 0xfeb5),
new struc((char) 0x638, (char) 0xfec6, (char) 0xfec7,
(char) 0xfec8, (char) 0xfec5),
new struc((char) 0x632, (char) 0xfeb0, (char) 0xfeaf,
(char) 0xfeb0, (char) 0xfeaf),
new struc((char) 0x648, (char) 0xfeee, (char) 0xfeed,
(char) 0xfeee, (char) 0xfeed),
new struc((char) 0x629, (char) 0xfe94, (char) 0xfe93,
(char) 0xfe93, (char) 0xfe93),
new struc((char) 0x649, (char) 0xfef0, (char) 0xfeef,
(char) 0xfef0, (char) 0xfeef),
new struc((char) 0x631, (char) 0xfeae, (char) 0xfead,
(char) 0xfeae, (char) 0xfead),
new struc((char) 0x624, (char) 0xfe86, (char) 0xfe85,
(char) 0xfe86, (char) 0xfe85),
new struc((char) 0x621, (char) 0xfe80, (char) 0xfe80,
(char) 0xfe80, (char) 0xfe80),
new struc((char) 0x626, (char) 0xfe8a, (char) 0xfe8b,
(char) 0xfe8c, (char) 0xfe89),
new struc((char) 0x623, (char) 0xfe84, (char) 0xfe83,
(char) 0xfe84, (char) 0xfe83),
new struc((char) 0x622, (char) 0xfe82, (char) 0xfe81,
(char) 0xfe82, (char) 0xfe81),
new struc((char) 0x625, (char) 0xfe88, (char) 0xfe87,
(char) 0xfe88, (char) 0xfe87),
new struc((char) 0x67e, (char) 0xfb57, (char) 0xfb58,
(char) 0xfb59, (char) 0xfb56), // peh
new struc((char) 0x686, (char) 0xfb7b, (char) 0xfb7c,
(char) 0xfb7d, (char) 0xfb7a), // cheh
new struc((char) 0x698, (char) 0xfb8b, (char) 0xfb8a,
(char) 0xfb8b, (char) 0xfb8a), // jeh
new struc((char) 0x6a9, (char) 0xfb8f, (char) 0xfb90,
(char) 0xfb91, (char) 0xfb8e), // keheh
new struc((char) 0x6af, (char) 0xfb93, (char) 0xfb94,
(char) 0xfb95, (char) 0xfb92), // gaf
// new struc((char) 0x6cc, (char) 0xfbfd, (char) 0xfbfe,
// (char) 0xfbff, (char) 0xfbfc), // Farsi yeh
new struc((char) 0x6cc, (char) 0xfbfd, (char) 0xfef3,
(char) 0xfef4, (char) 0xfbfc), // Arabic yeh
new struc((char) 0x6c0, (char) 0xfba5, (char) 0xfba4,
(char) 0xfba5, (char) 0xfba4) // heh with yeh
};
static struc[] arrStrucWoosim = {
new struc((char) 0x630, (char) 0xb5, (char) 0x82, (char) 0xb5,
(char) 0x82),
new struc((char) 0x62f, (char) 0xb4, (char) 0x81, (char) 0xb4,
(char) 0x81),
new struc((char) 0x62c, (char) 0x9b, (char) 0xb1, (char) 0xf9,
(char) 0xbf),
new struc((char) 0x62d, (char) 0x9c, (char) 0xb2, (char) 0xfa,
(char) 0xc0),
new struc((char) 0x62e, (char) 0x9d, (char) 0xb3, (char) 0xfe,
(char) 0xc1),
new struc((char) 0x647, (char) 0xac, (char) 0xe4, (char) 0x93,
(char) 0xd5),
new struc((char) 0x639, (char) 0xc9, (char) 0xd3, (char) 0x8b,
(char) 0xa4),
new struc((char) 0x63a, (char) 0xca, (char) 0xdd, (char) 0x8c,
(char) 0xa5),
new struc((char) 0x641, (char) 0xa6, (char) 0xde, (char) 0x8d,
(char) 0xcc),
new struc((char) 0x642, (char) 0xa7, (char) 0xdf, (char) 0x8e,
(char) 0xce),
new struc((char) 0x62b, (char) 0xbd, (char) 0xaf, (char) 0xea,
(char) 0x99),
new struc((char) 0x635, (char) 0xc4, (char) 0xc8, (char) 0x87,
(char) 0xa0),
new struc((char) 0x636, (char) 0xc5, (char) 0xcb, (char) 0x88,
(char) 0xa1),
new struc((char) 0x637, (char) 0xc6, (char) 0xcd, (char) 0xcd,
(char) 0xa2),
new struc((char) 0x643, (char) 0xcf, (char) 0xe0, (char) 0x8f,
(char) 0xa8),
new struc((char) 0x645, (char) 0xd2, (char) 0xe2, (char) 0x91,
(char) 0xaa),
new struc((char) 0x646, (char) 0xd4, (char) 0xe3, (char) 0x92,
(char) 0xab),
new struc((char) 0x62a, (char) 0xbd, (char) 0xaf, (char) 0xea,
(char) 0x99),
new struc((char) 0x627, (char) 0xbb, (char) 0x80, (char) 0xbb,
(char) 0x80),
new struc((char) 0x644, (char) 0xd1, (char) 0xe1, (char) 0x90,
(char) 0xa9),
new struc((char) 0x628, (char) 0xbc, (char) 0xae, (char) 0xe9,
(char) 0x98),
new struc((char) 0x64a, (char) 0xdc, (char) 0xe6, (char) 0x95,
(char) 0xdc),
new struc((char) 0x633, (char) 0xc2, (char) 0xb8, (char) 0xb8,
(char) 0x9e),
new struc((char) 0x634, (char) 0xc3, (char) 0xb9, (char) 0xb9,
(char) 0x9f),
new struc((char) 0x638, (char) 0xc7, (char) 0xcd, (char) 0xcd,
(char) 0xc7),
new struc((char) 0x632, (char) 0xb7, (char) 0xb7, (char) 0xb7,
(char) 0xb7),
new struc((char) 0x648, (char) 0x94, (char) 0x94, (char) 0x94,
(char) 0x94),
new struc((char) 0x629, (char) 0xda, (char) 0xda, (char) 0xda,
(char) 0xda),
new struc((char) 0x649, (char) 0xdc, (char) 0xe6, (char) 0x95,
(char) 0xdc),
new struc((char) 0x631, (char) 0xb6, (char) 0xb6, (char) 0xb6,
(char) 0xb6),
new struc((char) 0x624, (char) 0xe7, (char) 0xe7, (char) 0xe7,
(char) 0xe7),
new struc((char) 0x621, (char) 0xba, (char) 0xba, (char) 0xba,
(char) 0xba),
new struc((char) 0x626, (char) 0xd7, (char) 0xe8, (char) 0x97,
(char) 0xd7),
new struc((char) 0x623, (char) 0x80, (char) 0x80, (char) 0x80,
(char) 0x80),
new struc((char) 0x622, (char) 0x80, (char) 0x80, (char) 0x80,
(char) 0x80),
new struc((char) 0x625, (char) 0x80, (char) 0x80, (char) 0x80,
(char) 0x80),
new struc((char) 0x67e, (char) 0xbc, (char) 0xae, (char) 0xe9,
(char) 0x98), // peh
new struc((char) 0x686, (char) 0x9b, (char) 0xb1, (char) 0xf9,
(char) 0xbf), // cheh
new struc((char) 0x698, (char) 0xb7, (char) 0xb7, (char) 0xb7,
(char) 0xb7), // jeh
new struc((char) 0x6a9, (char) 0xcf, (char) 0xe0, (char) 0x8f,
(char) 0xa8), // keheh
new struc((char) 0x6af, (char) 0xcf, (char) 0xe0, (char) 0x8f,
(char) 0xa8), // gaf
new struc((char) 0x6cc, (char) 0xdc, (char) 0xe6, (char) 0x95,
(char) 0xdc), // yeh
new struc((char) 0x6c0, (char) 0xac, (char) 0xe4, (char) 0x93,
(char) 0xd5) // heh with yeh
};
private static final int N_DISTINCT_CHARACTERS = 43;
private static final String ArabicReverse(String s) {
try {
String Out = "", rev;
s = MakeReverse(s);
char[] chs = new char[s.length()];
chs = s.toCharArray();
int i = 0;
while (i < s.length()) {
if ((chs[i] >= '0' && chs[i] <= '9')) // isDigit(s[i]) ?
{
rev = "";
while (i < s.length()
&& ((chs[i] >= '0' && chs[i] <= '9') || chs[i] == '/')) // isDigit(s[i])
// ?
{
rev = rev + chs[i];
++i;
}
rev = MakeReverse(rev);
Out = Out + rev;
} else {
Out = Out + chs[i];
++i;
}
}
s = Out;
} catch (Exception ex) {
// throw new Exception(
// "An exception has occurred in ArabicReverse function.\\n"
// + ex.getMessage());
}
return s;
}
private static final boolean isFromTheSet1(/* WCHAR */char ch) {
char[] theSet1 = new char[] { (char) 0x62c, (char) 0x62d, (char) 0x62e,
(char) 0x647, (char) 0x639, (char) 0x63a, (char) 0x641,
(char) 0x642, (char) 0x62b, (char) 0x635, (char) 0x636,
(char) 0x637, (char) 0x643, (char) 0x645, (char) 0x646,
(char) 0x62a, (char) 0x644, (char) 0x628, (char) 0x64a,
(char) 0x633, (char) 0x634, (char) 0x638, (char) 0x67e,
(char) 0x686, (char) 0x6a9, (char) 0x6af, (char) 0x6cc,
(char) 0x626 };
int i = 0;
while (i < 28) {
if (ch == theSet1[i])
return true;
++i;
}
return false;
}
private static final boolean isFromTheSet2(/* WCHAR */char ch) {
char[] theSet2 = new char[] { (char) 0x627, (char) 0x623, (char) 0x625,
(char) 0x622, (char) 0x62f, (char) 0x630, (char) 0x631,
(char) 0x632, (char) 0x648, (char) 0x624, (char) 0x629,
(char) 0x649, (char) 0x698, (char) 0x6c0 };
int i = 0;
while (i < 14) {
if (ch == theSet2[i])
return true;
++i;
}
return false;
}
private static final String MakeReverse(String text) {
String Result = "";
char[] Ctext = new char[text.length()];
Ctext = text.toCharArray();
for (int i = (text.length()) - 1; i >= 0; i--) {
Result += Ctext[i];
}
return Result;
}
public static final String ConvertBackToRealFarsi(String In) {
if (!isFarsiConversionNeeded) {
return In;
}
String strOut = "";
StringBuilder strBuilder = new StringBuilder("");
int i = 0;
int j = 0;
char[] chIn = new char[In.length()];
chIn = In.toCharArray();
for (i = 0; i < In.length(); i++) {
boolean found = false;
for (j = 0; j < arrStruc.length; j++) {
if (chIn[i] == arrStruc[j].midGlyph ||
chIn[i] == arrStruc[j].iniGlyph ||
chIn[i] == arrStruc[j].endGlyph ||
chIn[i] == arrStruc[j].isoGlyph) {
strBuilder.append(arrStruc[j].character);
found = true;
break;
}
}
if (!found)
strBuilder.append(chIn[i]);
}
strOut = strBuilder.toString();
strOut = strOut.replace(szLa, "لا");
strOut = strOut.replace(szLaStick, "لا");
return strOut;
}
public static final String Convert(String In) {
if (!isFarsiConversionNeeded) {
return In;
}
if (In == null) {
return "";
}
boolean linkBefore, linkAfter;
String Out = In;
char[] chOut = new char[Out.length()];
chOut = Out.toCharArray();
char[] chIn = new char[In.length()];
chIn = In.toCharArray();
for (int i = 0; i < In.length(); i++) {
/* WCHAR */
char ch = chIn[i];
if ((ch >= (char) 0x0621 && ch <= (char) 0x064a)
|| (ch == (char) 0x067e) || (ch == (char) 0x0686)
|| (ch == (char) 0x0698) || (ch == (char) 0x06a9)
|| (ch == (char) 0x06af) || (ch == (char) 0x06cc)
|| (ch == (char) 0x06c0)) // is a Farsi character?
{
int idx = 0;
while (idx < N_DISTINCT_CHARACTERS) {
if (arrStruc[idx].character == chIn[i])
break;
++idx;
}
if (i == In.length() - 1)
linkAfter = false;
else
linkAfter = (isFromTheSet1(chIn[i + 1]) || isFromTheSet2(chIn[i + 1]));
if (i == 0)
linkBefore = false;
else
linkBefore = isFromTheSet1(chIn[i - 1]);
if (idx < N_DISTINCT_CHARACTERS) {
if (linkBefore && linkAfter)
chOut[i] = arrStruc[idx].midGlyph;
if (linkBefore && !linkAfter)
chOut[i] = arrStruc[idx].endGlyph;
if (!linkBefore && linkAfter)
chOut[i] = arrStruc[idx].iniGlyph;
if (!linkBefore && !linkAfter)
chOut[i] = arrStruc[idx].isoGlyph;
} else {
chOut[i] = chIn[i];
}
} else {
chOut[i] = chIn[i];
}
}
Out = "";
for (int j = 0; j < chOut.length; j++)
Out += chOut[j];
// Out = ArabicReverse(Out);
Out = Out.replace((char) 0x200c, ' '); // Change NO SPACE to SPACE
Out = Out.replace(szLamAndAlef, szLa); // Join 'Lam' and 'Alef' and
// make 'La'
Out = Out.replace(szLamStickAndAlef, szLaStick); // Join 'Lam Stick'
// and 'Alef'
// and make 'La
// Stick'
return reorderWords(Out);
}
private final static String reorderWords(String strIn)
{
final int ST_RTL = 0;
final int ST_LTR = 1;
String strOut = "";
String prevWord = "";
int state = ST_RTL;
char[] arr = strIn.toCharArray();
int i = 0;
while (i < arr.length) {
if (charIsLTR(arr[i]) && state != ST_LTR)
{
// state changed to LTR
state = ST_LTR;
strOut = prevWord + strOut;
prevWord = "";
prevWord += arr[i];
}
else if (charIsRTL(arr[i]) && state != ST_RTL)
{
// state changed to RTL
state = ST_RTL;
strOut = prevWord + strOut;
prevWord = "";
prevWord += arr[i];
}
else
{
// state is not changed
prevWord += arr[i];
}
i++;
}
strOut = prevWord + strOut;
return strOut;
}
private final static boolean charIsLTR(char ch)
{
return (ch >= (char) 65 & ch <= (char) 122)
|
Character.isDigit(ch);
}
private final static boolean charIsRTL(char ch)
{
return ch >= (char) 0x0621;
}
private static Typeface typeface;
public static final Typeface GetFarsiFont(Context context) {
if (typeface == null) {
typeface = Typeface.createFromAsset(context.getAssets(),
// "DroidSansFallback.ttf");
"TAHOMA.TTF");
}
return typeface;
}
}
3) И в вашей деятельности:
Typeface tf = Farsi.GetFarsiFont(this);
MyTextView.setTypeface(tf);
MyTextView.setText(Farsi.Convert("سلام"));
Вы бы просто нужно заменить код, касающиеся арабского на персидский.
Большое спасибо, Это было полезно. –
- 1. Язык, поддерживаемый LTL
- 2. Microsoft переводчик nb-NO переводит отлично, но поддерживаемый язык api-вызов не указан как поддерживаемый язык
- 3. Поддерживаемый язык DateTime для форматирования?
- 4. Какой самый поддерживаемый язык программирования для iPhone?
- 5. Настроить поддерживаемый язык на mcamara/laravel-localization
- 6. Как отобразить поддерживаемый язык в папке Strings в приложении UWP
- 7. Веб-сервер Android, не поддерживаемый firefox
- 8. Список Mimetypes, поддерживаемый контактами android
- 9. Как найти фактический минимальный уровень API, поддерживаемый проектом android?
- 10. Язык не изменен в android
- 11. Как использовать неподдерживаемый язык?
- 12. Android - Изменить язык (язык)
- 13. Как перевести язык в Android?
- 14. Как найти поддерживаемый формат видео?
- 15. Иврит язык не отображается - Android
- 16. Как вы определяете пользовательский язык (или язык) в Android-программировании?
- 17. Как использовать язык запросов CSV?
- 18. Objective C++, поддерживаемый NDK или не
- 19. Как использовать язык разметки речи?
- 20. Как использовать норвежский язык iphone?
- 21. Как изменить язык placepicker в android?
- 22. Как установить пакет, не поддерживаемый концами
- 23. Как преобразовать не поддерживаемый символ в объект html в Java
- 24. Параметр, не поддерживаемый веб-сервисом
- 25. Невозможно использовать CONFIG_CC_STACKPROTECTOR_STRONG: -fstack-protector-strong, не поддерживаемый компилятором
- 26. Как составить поддерживаемый список условий
- 27. Как узнать максимальный поддерживаемый fps устройством Android на уровне API?
- 28. Как определить язык/язык, если язык не содержит кодовой страницы?
- 29. Как выбрать, какой язык использовать в DrScheme?
- 30. Как ввести конкретный язык в android
Это будет сложно. Отображение языков LTR поддерживается на android 10- – njzk2