| # localization.py -- Code to manage/help portage localization. |
| # Copyright 2004-2020 Gentoo Authors |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| import locale |
| import math |
| |
| from portage import _encodings, _unicode_decode |
| |
| # We define this to make the transition easier for us. |
| |
| |
| def _(mystr): |
| """ |
| Always returns unicode, regardless of the input type. This is |
| helpful for avoiding UnicodeDecodeError from __str__() with |
| Python 2, by ensuring that string format operations invoke |
| __unicode__() instead of __str__(). |
| """ |
| return _unicode_decode(mystr) |
| |
| |
| def localization_example(): |
| # Dict references allow translators to rearrange word order. |
| print(_("You can use this string for translating.")) |
| print(_("Strings can be formatted with %(mystr)s like this.") % {"mystr": "VALUES"}) |
| |
| a_value = "value.of.a" |
| b_value = 123 |
| c_value = [1, 2, 3, 4] |
| print( |
| _("A: %(a)s -- B: %(b)s -- C: %(c)s") |
| % {"a": a_value, "b": b_value, "c": c_value} |
| ) |
| |
| |
| def localized_size(num_bytes): |
| """ |
| Return pretty localized size string for num_bytes size |
| (given in bytes). The output will be in kibibytes. |
| """ |
| |
| # always round up, so that small files don't end up as '0 KiB' |
| num_kib = math.ceil(num_bytes / 1024) |
| try: |
| formatted_num = locale.format_string("%d", num_kib, grouping=True) |
| except UnicodeDecodeError: |
| # failure to decode locale data |
| formatted_num = str(num_kib) |
| return _unicode_decode(formatted_num, encoding=_encodings["stdio"]) + " KiB" |