如何使文件选择器成为猕猴桃,以支持不同语言(英语,希伯来语)的文件 [英] How to make a file chooser in kivy to support files with different languages (English, Hebrew)

查看:60
本文介绍了如何使文件选择器成为猕猴桃,以支持不同语言(英语,希伯来语)的文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用kivy的文件选择器,当有希伯来语名称的文件夹文件时,它会打印乱码... 如果可能,我想支持其他语言. 试图在文件选择器中更改字体名称,对我不起作用. 您能帮我找出我在做什么错吗?

I am using kivy's file chooser and when there is a file of a folder with an Hebrew name, it prints gibberish... I want to support different languages if possible. Tried to change the font name in the file chooser, didn't work for me. Can you help me find out what am I doing wrong?

推荐答案

这是我的解决方案.一半的信用归功于Nykakin:

This is my solution. Half of the credit goes to Nykakin:

from kivy.app import App
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout


Builder.load_string("""
<MyWidget>:
    FileChooserListView
        id: filechooser
""")

class MyWidget(BoxLayout):
    def __init__(self, *args):
        Clock.schedule_once(self.update_filechooser_font, 0)
        return super(MyWidget, self).__init__(*args)

    def update_filechooser_font(self, *args):
        fc = self.ids.filechooser
        fc.bind(on_entry_added=self.update_file_list_entry)
        fc.bind(on_subentry_to_entry=self.update_file_list_entry)    


    def update_file_list_entry(self, file_chooser, file_list_entry, *args):
        file_list_entry.ids.filename.font_name = 'DejaVuSans.ttf'

        updated_text = []
        # to count where to insert the english letters
        english_counter = 0

        # the next statements used to split the name to name, extention
        splitted = file_list_entry.ids.filename.text.split('.')
        extention = ''
        if len(splitted) > 2:
            name = '.'.join(splitted)
        elif len(splitted) == 2:
            name = splitted[0]
            extention = splitted[1]
        else:
            name = '.'.join(splitted)

        # for each char in the reversed name (extention is always English and need to not be reversed)
        for char in name[::-1]:
            # if its in Hebrew append it regularly (reversed) and make sure to zero the counter
            if u"\u0590" <= char <= u"\u05EA":
                updated_text.append(char)
                english_counter = 0
            # if its an English character append it before the last english word (to un-reverse it) and increase the counter
            else:
                updated_text.insert(len(updated_text) - english_counter, char)
                english_counter += 1

        # add the extention in the end if exists
        if extention == '':
            file_list_entry.ids.filename.text = ''.join(updated_text)
        else:
            file_list_entry.ids.filename.text = ''.join(updated_text) + '.' + extention


class MyApp(App):
    def build(self):
        return MyWidget()


if __name__ == '__main__':
    MyApp().run()

这篇关于如何使文件选择器成为猕猴桃,以支持不同语言(英语,希伯来语)的文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆