# Workaround https://github.com/itstool/itstool/issues/25
# Obtained from Fedora

--- itstool.in.orig	2018-08-21 15:27:24 UTC
+++ itstool.in
@@ -44,9 +44,22 @@ if PY3:
         else:
             return str(s)
     ustr_type = str
+    def pr_str(s):
+        """Return a string that can be safely print()ed"""
+        # Since print works on both bytes and unicode, just return the argument
+        return s
 else:
     string_types = basestring,
     ustr = ustr_type = unicode
+    def pr_str(s):
+        """Return a string that can be safely print()ed"""
+        if isinstance(s, str):
+            # Since print works on str, just return the argument
+            return s
+        else:
+            # print may not work on unicode if the output encoding cannot be
+            # detected, so just encode with UTF-8
+            return unicode.encode(s, 'utf-8')
 
 NS_ITS = 'http://www.w3.org/2005/11/its'
 NS_ITST = 'http://itstool.org/extensions/'
@@ -1060,9 +1073,9 @@ class Document (object):
             if strict:
                 raise
             else:
-                sys.stderr.write('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
+                sys.stderr.write(pr_str('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
                         (lang + ' ') if lang is not None else '',
-                        msgstr.encode('utf-8')))
+                        msgstr)))
                 self._xml_err = ''
                 return node
         def scan_node(node):
@@ -1087,9 +1100,9 @@ class Document (object):
             if strict:
                 raise
             else:
-                sys.stderr.write('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
+                sys.stderr.write(pr_str('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
                     (lang + ' ') if lang is not None else '',
-                    msgstr.encode('utf-8')))
+                    msgstr)))
                 self._xml_err = ''
                 ctxt.doc().freeDoc()
                 return node
