gpt4 book ai didi

python - 在 Python 中,尝试使用第二个 RESX 的内容更新 RESX

转载 作者:太空宇宙 更新时间:2023-11-04 03:33:21 26 4
gpt4 key购买 nike

我只是偶尔写代码,这是我能放在一起的最好的,我希望有人能指出我正确的方向。(我一直在寻找其他答案,但他们只让我走到这一步)

import xml.etree.ElementTree as ET
tree = ET.parse('FMTranslations.resx') # localised file - contains sub set of strings found in Master
transsubset = tree.getroot()

import xml.etree.ElementTree as ET2
tree2 = ET2.parse('FMTranslations.fr-FR.resx') # Master file for French strings.
master = tree2.getroot()

count=0
for child in transsubset:
#print (child.tag, child.attrib)
#print (child.tag)
count += 1
match = 0
x = 5 # 5th element is the 1st data element we are interested in


print('translations : \n')
while x < count:
print(transsubset[x].attrib,'\n', transsubset[x][0].text)
print('\n\n\n\n')

for child in master: #
if child.attrib == transsubset[x].attrib:
print(child.attrib)
print(transsubset[x].attrib)
print('\n\n')

# copy transsubset[x][0].text value into child something...

match += 1
print(' -------------------- \n')

x += 1

基本上我想用另一个 resx 文件的内容更新一个 resx 文件;要更改的部分可以在需要维护的文件和结构中的任何位置。

更详细...我们使用 RESX 文件来保存我们的本地化字符串——每种语言 1 个 RESX。由于这些文件的大小,当我们获取要翻译的字符串时,我们每次只发送新的或更改的字符串,即增量,而不是整个文件。

例如在我们的 RESX 中间我们有

<data name="S_LANGUAGE_ENF_IE" xml:space="preserve">
<value>English</value>
<comment>Language English (Ireland)</comment>
</data>
<data name="S_LANGUAGE_GER" xml:space="preserve">
<value>German</value>
<comment>Language German</comment>
</data>
<data name="S_LANGUAGE_FRA" xml:space="preserve">
<value>French</value>
<comment>language French</comment>
</data>
<data name="S_LANGUAGE_NED" xml:space="preserve">
<value>Dutch</value>
<comment>Language Dutch</comment>
</data>
<data name="S_LANGUAGE_SPA" xml:space="preserve">
<value>Spanish</value>
<comment>Language Spanish</comment>
</data>

例如,如果我发送了一个仅包含 RESX 的本地化

 <data name="S_LANGUAGE_FRA" xml:space="preserve">
<value>French</value>
<comment>language French</comment>
</data>
<data name="S_LANGUAGE_NED" xml:space="preserve">
<value>Dutch</value>
<comment>Language Dutch</comment>
</data>

当这些翻译回来时,我必须(添加到法语文件)。

  <data name="S_LANGUAGE_FRA" xml:space="preserve">
<value>Français</value>
<comment>language French</comment>
</data>
<data name="S_LANGUAGE_NED" xml:space="preserve">
<value>Néerlandais</value>
<comment>Language Dutch</comment>
</data>

我想要一个 python 脚本

a) 读取翻译后的 RESX 文件或对其进行解析

b) 在原始的、完整的 RESX 中找到匹配的元素属性,例如<data name="S_LANGUAGE_FRA" xml:space="preserve">

c) 用翻译后的 VALUE 替换原来的 VALUE <value>French</value><value> Français</value> 取代

注意:我正在发送包含 header 和 xsd 信息等的有效 RESX 文件——翻译公司可以本地化 RESX,而且更容易做到这一点。

我正在尝试编写一个 Python 脚本来执行此操作——根据属性在 RESX 中将英文字符串替换为翻译后的字符串。我卡住的地方是 # copy transsubset[x][0].text value into child something...我不知道在这里放什么&我正在尝试不同的东西但没有成功也许我的理解方式不对,两者不能真正协同工作,但我只是偶尔编写代码,所以这对其他人来说可能是显而易见的。

感谢您提供的任何建议谢谢

最佳答案

我会使用 BeautifulSoup达到你想要的结果。它不会根据架构验证文件(如果需要,您可以将其作为一个单独的步骤来执行),但写起来很干净:

# -*- coding: utf-8 -*-

SOURCE_MARKUP = """
<root>
<data name="S_LANGUAGE_ENF_IE" xml:space="preserve">
<value>English</value>
<comment>Language English (Ireland)</comment>
</data>
<data name="S_LANGUAGE_GER" xml:space="preserve">
<value>German</value>
<comment>Language German</comment>
</data>
<data name="S_LANGUAGE_FRA" xml:space="preserve">
<value>French</value>
<comment>language French</comment>
</data>
<data name="S_LANGUAGE_NED" xml:space="preserve">
<value>Dutch</value>
<comment>Language Dutch</comment>
</data>
<data name="S_LANGUAGE_SPA" xml:space="preserve">
<value>Spanish</value>
<comment>Language Spanish</comment>
</data>
</root>
"""

DELTA_MARKUP = """
<root>
<data name="S_LANGUAGE_FRA" xml:space="preserve">
<value>Français</value>
<comment>language French</comment>
</data>
<data name="S_LANGUAGE_NED" xml:space="preserve">
<value>Néerlandais</value>
<comment>Language Dutch</comment>
</data>
</root>
"""

from bs4 import BeautifulSoup

source = BeautifulSoup(SOURCE_MARKUP)
delta = BeautifulSoup(DELTA_MARKUP)

delta_data = delta.find_all('data', attrs={'name': True})

for change in delta_data:
# find in source
origin = source.find('data', attrs={'name': change['name']})
# replace tag
origin.replace_with(change)

print source.prettify()

关于python - 在 Python 中,尝试使用第二个 RESX 的内容更新 RESX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30194802/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com