多语言UI不匹配问题(英)

多语言UI不匹配问题(英)

常见问题一:文本重叠

情况1. 很多界面有标题文本和帮助图标,但是未做自适应文本长度,导致文本变长的时候文本直接和图标重叠

情况2. 当文本1和文本2处于同一行,且文本2接在1后,需要对文本1做自适应长度处理,否则文本1可能和文本2重叠
在这里插入图片描述

问题处理:

  • 以情况1为例,需要将标题文本的obj添加Content Size Fitter组件,并设置Horizontal Fit为Preferred Size(横向自适应)

  • 然后将希望位于标题文本后面的obj作为标题obj的子物体,设置锚点为右中心,自行调整合适的位置即可
    在这里插入图片描述

  • 需要注意的是,如果调整了层级关系,需要去代码做对应修改。如果调整的是预制,需要修改所有使用到该预制的UI的代码;如果调整时涉及到item代码文件的修改,需要找到所有使用到该item的预制,并同步修改该预制的层级。

常见问题二:文本展示不全

情况1. 因为文本框长度不够长导致英文文本超框不显示
在这里插入图片描述

情况2. 文本超出界面显示
在这里插入图片描述

在这里插入图片描述

问题处理:

  • 以情况1为例,建议将文本框的属性设置为Wrap+Truncate,然后固定文本框的长度(选择一个合适的长度),最后设置字体自适应,这样可以满足大部分情况下的多语言处理,如果英文文本实在是过长,可以考虑缩短翻译
  • 情况2和情况1处理方式相同。如果还是不满意可以减小字体行距,这样过长的文本可以换行显示。但这样需要注意中文如果换行会不会有问题(一般不会有,因为中文的长度一般不会超框)
常见问题三:拼接文本问题

情况1. 时间文本拼接问题,中文的年月日大部分是拼接显示(2024 + 年 + 6 + 月 + 19 + 日),但英文实际应该显示April 29th, 2024, at 15:49:32
在这里插入图片描述

情况2. 拼接缺少空格,此处中文翻译为冷淡2阶(冷淡 + 2阶),翻译成英文就是(ApathyT2)中间少了个空格
在这里插入图片描述

问题处理:

  • 时间翻译主要是解决两个问题,一个是英文的1号是1st,2号是2nd这些特殊的规则,还有一个是不同语言的语序不一样。这里选择的处理方式是将1-12月,周一到周日,1-31号的英文单独字段化。然后时间的处理统一调用函数timeConvertYearMonthDay,在这里面判断当前语言,并对不同语言的语序做了单独的处理。
    在这里插入图片描述

  • 情况2则是需要考虑到拼接的问题,使用一个字段two_chains单独处理这种两两拼接。
    在这里插入图片描述

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,我们需要确定所需的技术栈和工具。由于需要实现用户界面、网络访问、文件读写等功能,我们可以考虑使用以下技术: - Python编程语言 - PyQt5库(用于实现用户界面) - requests库(用于发送HTTP请求) - BeautifulSoup库(用于解析HTML页面) - SQLite数据库(用于存储本地单词库) 下面是实现步骤: 1. 设计数据库表结构 我们可以设计一个名为`words`的表,包含以下字段: - `id`:单词ID,自增长整数 - `word`:单词,字符串 - `definition`:单词的注释,字符串 - `translation`:单词的翻译,字符串 2. 实现数据库操作类 我们可以创建一个`Database`类,封装数据库相关的操作,包括创建表、增加单词、删除单词、查询单词等。例如,查询单词可以使用以下代码实现: ```python def search_word(self, word): """ 查询单词 :param word: 单词 :return: 包含单词信息的字典,如果单词不存在则返回None """ with self.conn: cur = self.conn.cursor() cur.execute("SELECT * FROM words WHERE word=?", (word,)) row = cur.fetchone() if row: return { "id": row[0], "word": row[1], "definition": row[2], "translation": row[3] } else: return None ``` 3. 实现网络查询类 我们可以创建一个`WebQuery`类,封装网络查询相关的操作,包括从网络上获取单词的注释、翻译等。例如,获取单词的注释和翻译可以使用以下代码实现: ```python def get_definition(self, word): """ 获取单词的注释 :param word: 单词 :return: 单词的注释,如果获取失败则返回None """ url = f"https://www.dictionary.com/browse/{word}" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"} response = requests.get(url, headers=headers) if response.status_code == 200: soup = BeautifulSoup(response.text, 'lxml') definition = soup.find("span", {"class": "one-click-content css-1p89gle e1q3nk1v4"}) if definition: return definition.text.strip() return None def get_translation(self, word): """ 获取单词的翻译 :param word: 单词 :return: 单词的翻译,如果获取失败则返回None """ url = f"https://fanyi.baidu.com/v2transapi?from=en&to=zh&query={word}" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"} response = requests.get(url, headers=headers) if response.status_code == 200: data = json.loads(response.text) if "dict_result" in data: return data["dict_result"]["simple_means"]["word_means"] return None ``` 4. 实现用户界面 我们可以使用PyQt5库创建一个基本的用户界面,包括一个单行文本框、一个搜索按钮、一个注释框、一个翻译框和一个添加按钮。当用户输入单词并点击搜索按钮时,程序会先尝试在本地单词库中查找单词,如果找到则直接显示注释和翻译;否则,程序会从网络上获取单词的注释和翻译,并将其显示在注释框和翻译框中。如果用户需要添加新单词,则可以输入单词、注释和翻译,并点击添加按钮。 5. 实现联想功能 为了实现联想功能,我们可以在用户输入单词时,动态地从本地单词库中查找匹配的单词,并在文本框下方显示出来。用户可以点击匹配的单词,将其填充到文本框中。 6. 实现文件读写功能 我们可以添加一个导入单词和导出单词的功能,允许用户将单词库导入或导出为一个CSV文件。例如,导入单词可以使用以下代码实现: ```python def import_csv(self, filename): """ 导入单词 :param filename: CSV文件名 """ with open(filename, 'r', encoding='utf-8') as f: reader = csv.reader(f) for row in reader: self.add_word(row[0], row[1], row[2]) ``` 7. 实现多线程功能 为了避免程序在进行网络查询时出现卡顿,我们可以使用多线程来实现异步查询。例如,查询单词的代码可以改为以下形式: ```python def search_word(self, word): """ 查询单词 :param word: 单词 :return: 包含单词信息的字典,如果单词不存在则返回None """ # 先在本地库中查找 local_result = self.search_local(word) if local_result: return local_result # 如果本地库中不存在,则从网络上查询 web_query = WebQuery() definition = None translation = None with futures.ThreadPoolExecutor() as executor: definition_future = executor.submit(web_query.get_definition, word) translation_future = executor.submit(web_query.get_translation, word) definition = definition_future.result() translation = translation_future.result() # 将查询结果存入本地库 if definition or translation: self.add_word(word, definition, translation) # 返回查询结果 return { "word": word, "definition": definition, "translation": translation } ``` 这里使用了`futures.ThreadPoolExecutor`来创建线程池,并使用`executor.submit`方法将网络查询任务提交到线程池中。查询结果会通过`future.result()`方法返回,如果查询失败则返回`None`。 以上是实现语小词典的大致步骤,具体实现过程可能会比较复杂,需要根据具体需求进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值