l10n: Fix Region representation.

Some fields in Region are lists (for example, keyboards) so we do need a
better way to provide its representation string.

BUG=none
TEST=make test

Change-Id: Ia4afd28b6103f4eec2777b1f44513961177d3d79
Reviewed-on: https://chromium-review.googlesource.com/356940
Commit-Ready: Hung-Te Lin <hungte@chromium.org>
Tested-by: Hung-Te Lin <hungte@chromium.org>
Reviewed-by: Ricky Liang <jcliang@chromium.org>
diff --git a/py/test/l10n/regions.py b/py/test/l10n/regions.py
index 2bf16aa..c4f24d1 100755
--- a/py/test/l10n/regions.py
+++ b/py/test/l10n/regions.py
@@ -141,7 +141,13 @@
               f, LANGUAGE_CODE_PATTERN.pattern))
 
   def __repr__(self):
-    return 'Region(%s)' % ([', '.join(getattr(self, x) for x in self.FIELDS)])
+    return 'Region(%s)' % ', '.join(
+        [repr(getattr(self, x)) for x in self.FIELDS])
+
+  def __str__(self):
+    return 'Region(%s)' % ', '.join([
+        ';'.join(v) if isinstance(v, list) else str(v)
+        for x in self.FIELDS for v in [getattr(self, x)]])
 
   def GetFieldsDict(self):
     """Returns a dict of all substantive fields.