diff --git a/bundler/bundler.py b/bundler/bundler.py
index 1e2a849..53cd292 100644
--- a/bundler/bundler.py
+++ b/bundler/bundler.py
@@ -454,6 +454,30 @@ def copy_icon_themes(self):
cmd = "gtk-update-icon-cache -f " + path + " 2>/dev/null"
os.popen(cmd)
+ def copy_translations(self):
+ translations = self.project.get_translations()
+ prefix = self.project.get_prefix()
+ for program in translations:
+ source = self.project.evaluate_path(program.source)
+
+
+ def name_filter(filename):
+ path, fname = os.path.split(filename)
+ name, ext = os.path.splitext(fname)
+ if name != program.name:
+ return False
+ elif ext not in (".mo", ".po"):
+ return False
+ else:
+ return True
+
+ for root, trees, files in os.walk(source):
+ for file in filter(name_filter, files):
+ path = os.path.join(root, file)
+ self.copy_path(Path("${prefix}" + path[len(prefix):],
+ program.dest))
+
+
def run(self):
# Remove the temp location forcefully.
path = self.project.evaluate_path(self.bundle_path)
@@ -497,6 +521,9 @@ def run(self):
# Data
for path in self.project.get_data():
self.copy_path(path)
+
+ # Translaations
+ self.copy_translations()
# Frameworks
frameworks = self.project.get_frameworks()
diff --git a/bundler/project.py b/bundler/project.py
index 6a7b7e8..7c83079 100644
--- a/bundler/project.py
+++ b/bundler/project.py
@@ -151,6 +151,26 @@ def from_node(cls, node):
return binary
from_node = classmethod(from_node)
+class Translation(Path):
+ def __init__(self, name, sourcepath, destpath):
+ Path.__init__(self, sourcepath, destpath)
+ self.name = name
+
+ def from_node(cls, node):
+ source = utils.node_get_string(node)
+ dest = node.getAttribute("dest")
+ if len(dest) == 0:
+ dest = None
+ name = node.getAttribute("name")
+ if len(name) == 0:
+ raise "The tag 'translations' must have a 'name' property"
+
+ return Translation(name, source, dest)
+ from_node = classmethod(from_node)
+
+
+
+
class Data(Path):
pass
@@ -309,6 +329,13 @@ def get_frameworks(self):
frameworks.append(Framework.from_node(node))
return frameworks
+ def get_translations(self):
+ translations = []
+ nodes = utils.node_get_elements_by_tag_name(self.root, "translations")
+ for node in nodes:
+ translations.append(Translation.from_node(node))
+ return translations
+
def get_main_binary(self):
node = utils.node_get_element_by_tag_name(self.root, "main-binary")
if not node:
diff --git a/bundler/project_test.py b/bundler/project_test.py
index 1db0d27..4c3d583 100644
--- a/bundler/project_test.py
+++ b/bundler/project_test.py
@@ -165,4 +165,14 @@ def test_o_get_data(self):
"${bundle}/Contents/Resources/etc/gtk-2.0/gtkrc",
"Data[2] Destination %s" % data[2].dest)
+ def test_p_get_translations(self):
+ trans = self.goodproject.get_translations()
+ self.failUnlessEqual(len(trans), 1,
+ "Wrong number of translations %d" % len(trans))
+ self.failUnlessEqual(trans[0].name, "foo",
+ "Bad translation name %s" % trans[0].name)
+ self.failUnlessEqual(trans[0].source, "${prefix}/share/locale",
+ "Bad translation source %s" % trans[0].source)
+
+
diff --git a/examples/gtk-demo.bundle b/examples/gtk-demo.bundle
index 99d15d3..549914a 100644
--- a/examples/gtk-demo.bundle
+++ b/examples/gtk-demo.bundle
@@ -61,6 +61,19 @@
${prefix}/lib/gtk-2.0/${pkg:gtk+-2.0:gtk_binary_version}/loaders/*.so
+
+
+ ${prefix}/share/locale
+
+
+
+ ${prefix}/share/locale
+
+
+