在 kivy 应用的标签文本中使用孟加拉语
Posted
技术标签:
【中文标题】在 kivy 应用的标签文本中使用孟加拉语【英文标题】:using bangla language in label text of kivy app 【发布时间】:2019-11-29 12:19:59 【问题描述】:我想在标签中添加孟加拉语文本。我为此使用了几种字体。在这里,我使用了 kalpurush.ttf。孟加拉语文本显示良好。但是孟加拉字母的顺序有些问题。我写了“তিন আস্তানা মাস্তান”।但它显示-“ত িন আসতানা মাসতান”它也没有显示连词。并且“ি”符号应该在“ত”之前,但在此之后。我正在使用 pydroid 应用程序。
在 kivy 启动器中,当我使用除英文以外的任何其他字体时,它只会崩溃。所以kivy启动器不支持任何其他字体。
我只是想知道在电脑上运行孟加拉语文本时的样子。但我没有电脑。
可以请任何人在电脑上运行此代码并给我截图吗?我只需要知道bangla字体在kivy中是否显示良好。因为我必须用我的母语(孟加拉语)制作一个 android 应用程序
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
Builder.load_string('''
<hello>:
Label:
text:"তিন অাস্তানা মাস্তান"
font_name:"kalpurush.ttf" #please download this font
''')
class hello(BoxLayout):
pass
class go(App):
def build(self):
return hello()
go().run()
【问题讨论】:
这是您使用 Python 3.6.8 和 kivy 1.11.0 在 Ubuntu 18.04 上运行的代码的屏幕截图:screenshot。在 Windows 10 上运行会产生相同的结果。 有什么办法可以解决这个问题? python支持其他语言还是只支持英语?我必须用我的母语制作一个安卓应用程序。但是 python/kivy 不支持格式良好的孟加拉语!请帮我解决这个问题,我将不胜感激 @ashikuzzaman:你的操作系统是什么? 我在 pydroid 应用程序中运行我的代码。所以操作系统是安卓。我也想做一个安卓应用。但是在 pydroid 应用程序中,我遇到了该错误(如上所述),并且在 kivy 启动器中,如果我使用任何其他语言字体(不是英文),那么代码在 kivy 启动器中崩溃。所以我想知道有没有办法解决这个问题。你也可以看看约翰安德森的评论 你好 ikolim,你能帮帮我吗? 【参考方案1】:我们可以使用 [font][/font] 标签在同一个 Label 小部件中使用 Bangla ANSI 文本和英文文本。像这样(kv 语言):
text = "[font=font/SutonnyMJ]Avwg evsjvq K_v ewj[/font] means I speak Bangla"
但是如何生成带有字体标签的(英语和孟加拉语混合的)文本呢? This github repo提供解决方案:
def toBijoy(str):
def isEnglish(s):
return s.isascii()
import converter
test = converter.Unicode()
b_flag = 0
ftext = ""
temp = ''
for char in str:
if char == ' ' and b_flag == 0:
ftext += char
elif char == ' ' and b_flag == 1:
temp += char
elif isEnglish(char) is False:
if b_flag == 0:
temp += "কর্ড [font=font/SutonnyMJ]" + char
b_flag = 1
else:
temp += char
else:
if b_flag == 1:
temp = test.convertUnicodeToBijoy(temp)
temp = temp[4:] + "[/font]" + char
ftext += temp
b_flag = 0
temp = ''
else:
ftext += char
return ftext
现在我们可以转换文本(带有字体标签),使用 id 调用一个小部件,然后分配格式化文本。
self.ids.bangla_mixed_text.markup = True
self.ids.bangla_mixed_text.text = toBijoy(str)
在 kv 语言中,我们需要这样做:
Label:
id: bangla_mixed_text
text: ''
更多细节在 repo 中。
【讨论】:
以上是关于在 kivy 应用的标签文本中使用孟加拉语的主要内容,如果未能解决你的问题,请参考以下文章