From: Steve Langasek Date: Thu, 17 Aug 2017 23:37:47 +0000 (+0100) Subject: disable-i18n X-Git-Tag: archive/raspbian/2.27.6-1+rpi1~1^2~5 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=8b189d610376b07afd7ddce8a4dac03044cea299;p=snapd.git disable-i18n Gbp-Pq: Name disable-i18n.patch --- diff --git a/i18n/i18n.go b/i18n/i18n.go index b03278b0..37d0e1b0 100644 --- a/i18n/i18n.go +++ b/i18n/i18n.go @@ -21,86 +21,7 @@ package i18n //go:generate update-pot -import ( - "fmt" - "os" - "path/filepath" - "strings" - - "github.com/ojii/gettext.go" - - "github.com/snapcore/snapd/dirs" - "github.com/snapcore/snapd/osutil" -) - -// TEXTDOMAIN is the message domain used by snappy; see dgettext(3) -// for more information. -var ( - TEXTDOMAIN = "snappy" - locale gettext.Catalog - translations gettext.Translations -) - -func init() { - bindTextDomain(TEXTDOMAIN, "/usr/share/locale") - setLocale("") -} - -func langpackResolver(baseRoot string, locale string, domain string) string { - // first check for the real locale (e.g. de_DE) - // then try to simplify the locale (e.g. de_DE -> de) - locales := []string{locale, strings.SplitN(locale, "_", 2)[0]} - for _, locale := range locales { - r := filepath.Join(locale, "LC_MESSAGES", fmt.Sprintf("%s.mo", domain)) - - // look into the core snaps first for translations, - // then the main system - candidateDirs := []string{ - filepath.Join(dirs.SnapMountDir, "/core/current/", baseRoot), - baseRoot, - } - for _, root := range candidateDirs { - // ubuntu uses /usr/lib/locale-langpack and patches the glibc gettext - // implementation - langpack := filepath.Join(root, "..", "locale-langpack", r) - if osutil.FileExists(langpack) { - return langpack - } - - regular := filepath.Join(root, r) - if osutil.FileExists(regular) { - return regular - } - } - } - - return "" -} - -func bindTextDomain(domain, dir string) { - translations = gettext.NewTranslations(dir, domain, langpackResolver) -} - -func setLocale(loc string) { - if loc == "" { - loc = os.Getenv("LC_MESSAGES") - if loc == "" { - loc = os.Getenv("LANG") - } - } - // de_DE.UTF-8, de_DE@euro all need to get simplified - loc = strings.Split(loc, "@")[0] - loc = strings.Split(loc, ".")[0] - - locale = translations.Locale(loc) -} - // G is the shorthand for Gettext func G(msgid string) string { - return locale.Gettext(msgid) -} - -// NG is the shorthand for NGettext -func NG(msgid string, msgidPlural string, n uint32) string { - return locale.NGettext(msgid, msgidPlural, n) + return msgid } diff --git a/i18n/i18n_test.go b/i18n/i18n_test.go deleted file mode 100644 index 81cb050a..00000000 --- a/i18n/i18n_test.go +++ /dev/null @@ -1,162 +0,0 @@ -// -*- Mode: Go; indent-tabs-mode: t -*- - -/* - * Copyright (C) 2014-2015 Canonical Ltd - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 3 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -package i18n - -import ( - "io/ioutil" - "os" - "os/exec" - "path/filepath" - "testing" - - . "gopkg.in/check.v1" - - "github.com/snapcore/snapd/dirs" -) - -// Hook up check.v1 into the "go test" runner -func Test(t *testing.T) { TestingT(t) } - -var mockLocalePo = []byte(` -msgid "" -msgstr "" -"Project-Id-Version: snappy-test\n" -"Report-Msgid-Bugs-To: snappy-devel@lists.ubuntu.com\n" -"POT-Creation-Date: 2015-06-16 09:08+0200\n" -"Language: en_DK\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;>\n" - -msgid "plural_1" -msgid_plural "plural_2" -msgstr[0] "translated plural_1" -msgstr[1] "translated plural_2" - -msgid "singular" -msgstr "translated singular" -`) - -func makeMockTranslations(c *C, localeDir string) { - fullLocaleDir := filepath.Join(localeDir, "en_DK", "LC_MESSAGES") - err := os.MkdirAll(fullLocaleDir, 0755) - c.Assert(err, IsNil) - - po := filepath.Join(fullLocaleDir, "snappy-test.po") - mo := filepath.Join(fullLocaleDir, "snappy-test.mo") - err = ioutil.WriteFile(po, mockLocalePo, 0644) - c.Assert(err, IsNil) - - cmd := exec.Command("msgfmt", po, "--output-file", mo) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - err = cmd.Run() - c.Assert(err, IsNil) -} - -type i18nTestSuite struct { - origLang string - origLcMessages string -} - -var _ = Suite(&i18nTestSuite{}) - -func (s *i18nTestSuite) SetUpTest(c *C) { - // this dir contains a special hand-crafted en_DK/snappy-test.mo - // file - localeDir := c.MkDir() - makeMockTranslations(c, localeDir) - - // we use a custom test mo file - TEXTDOMAIN = "snappy-test" - - s.origLang = os.Getenv("LANG") - s.origLcMessages = os.Getenv("LC_MESSAGES") - - bindTextDomain("snappy-test", localeDir) - os.Setenv("LANG", "en_DK.UTF-8") - setLocale("") -} - -func (s *i18nTestSuite) TearDownTest(c *C) { - os.Setenv("LANG", s.origLang) - os.Setenv("LC_MESSAGES", s.origLcMessages) -} - -func (s *i18nTestSuite) TestTranslatedSingular(c *C) { - // no G() to avoid adding the test string to snappy-pot - var Gtest = G - c.Assert(Gtest("singular"), Equals, "translated singular") -} - -func (s *i18nTestSuite) TestTranslatesPlural(c *C) { - // no NG() to avoid adding the test string to snappy-pot - var NGtest = NG - c.Assert(NGtest("plural_1", "plural_2", 1), Equals, "translated plural_1") -} - -func (s *i18nTestSuite) TestTranslatedMissingLangNoCrash(c *C) { - setLocale("invalid") - - // no G() to avoid adding the test string to snappy-pot - var Gtest = G - c.Assert(Gtest("singular"), Equals, "singular") -} - -func (s *i18nTestSuite) TestInvalidTextDomainDir(c *C) { - bindTextDomain("snappy-test", "/random/not/existing/dir") - setLocale("invalid") - - // no G() to avoid adding the test string to snappy-pot - var Gtest = G - c.Assert(Gtest("singular"), Equals, "singular") -} - -func (s *i18nTestSuite) TestLangpackResolverFromLangpack(c *C) { - root := c.MkDir() - localeDir := filepath.Join(root, "/usr/share/locale") - err := os.MkdirAll(localeDir, 0755) - c.Assert(err, IsNil) - - d := filepath.Join(root, "/usr/share/locale-langpack") - makeMockTranslations(c, d) - bindTextDomain("snappy-test", localeDir) - setLocale("") - - // no G() to avoid adding the test string to snappy-pot - var Gtest = G - c.Assert(Gtest("singular"), Equals, "translated singular", Commentf("test with %q failed", d)) -} - -func (s *i18nTestSuite) TestLangpackResolverFromCore(c *C) { - origSnapMountDir := dirs.SnapMountDir - defer func() { dirs.SnapMountDir = origSnapMountDir }() - dirs.SnapMountDir = c.MkDir() - - d := filepath.Join(dirs.SnapMountDir, "/core/current/usr/share/locale") - makeMockTranslations(c, d) - bindTextDomain("snappy-test", "/usr/share/locale") - setLocale("") - - // no G() to avoid adding the test string to snappy-pot - var Gtest = G - c.Assert(Gtest("singular"), Equals, "translated singular", Commentf("test with %q failed", d)) -} diff --git a/tests/main/i18n/task.yaml b/tests/main/i18n/task.yaml deleted file mode 100644 index db2c0603..00000000 --- a/tests/main/i18n/task.yaml +++ /dev/null @@ -1,16 +0,0 @@ -summary: Test that i18n works - -execute: | - # The snapd deb from the archive does not contain .mo files, those - # are stripped out by the langpack buildd stuff and put into the - # the various langpacks. - # Therefore this test only makes sense when we build snapd from - # the local source. When running against an official snapd deb - # or against the core we will not see translations - if [ ! -f /usr/share/locale/de/LC_MESSAGES/snappy.mo ]; then - echo "SKIP: No mo files for snapd available" - exit 0 - fi - - echo "Ensure that i18n works" - LANG=de_DE.UTF-8 snap changes everything | MATCH "Ja, ja, allerdings."