diff options
author | Matúš Kukan <matus.kukan@collabora.com> | 2013-12-03 08:19:36 +0100 |
---|---|---|
committer | David Tardon <dtardon@redhat.com> | 2013-12-06 05:43:21 -0600 |
commit | c2f5e09900561d417d53a74fd6bc189cb7d898e1 (patch) | |
tree | 93580181d603dcdcfb73f5950cbed019be8c1a88 /vcl/source | |
parent | 9a37ce189881f12d678fdb054219b13c3e4c7e40 (diff) |
Zip .ui translations per UIConfig target.
Fix installer / scp2 to not ignore directory prefix in 'Name'.
Change-Id: Ib319363c8be73a72029f1ba3833e518e15c55e29
Reviewed-on: https://gerrit.libreoffice.org/6915
Reviewed-by: David Tardon <dtardon@redhat.com>
Tested-by: David Tardon <dtardon@redhat.com>
Diffstat (limited to 'vcl/source')
-rw-r--r-- | vcl/source/window/builder.cxx | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index e2f306dbf780..577eb8609398 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -7,6 +7,9 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include <com/sun/star/packages/zip/ZipFileAccess.hpp> + +#include <comphelper/processfactory.hxx> #include <osl/module.hxx> #include <sal/log.hxx> #include <unotools/configmgr.hxx> @@ -98,24 +101,44 @@ void VclBuilder::loadTranslations(const LanguageTag &rLanguageTag, const OUStrin aTransBuf.append('.'); nLastSlash = 0; } - aTransBuf.append("/res/").append(rLanguageTag.getLanguage()); + aTransBuf.append("/res/"); + OUString sLang(rLanguageTag.getLanguage()); switch (i) { case 0: - aTransBuf.append('-').append(rLanguageTag.getCountry()); + sLang = sLang + "-" + rLanguageTag.getCountry(); break; default: break; } + aTransBuf.append(sLang); + aTransBuf.append(".zip"); sal_Int32 nEndName = rUri.lastIndexOf('.'); if (nEndName == -1) nEndName = rUri.getLength(); - aTransBuf.append(rUri.copy(nLastSlash, nEndName-nLastSlash)); - - OUString sTransUri = aTransBuf.makeStringAndClear(); + OUString sZippedFile(rUri.copy(nLastSlash + 1, nEndName - nLastSlash - 1) + "/" + sLang + ".ui"); try { - xmlreader::XmlReader reader(sTransUri); + uno::Reference<packages::zip::XZipFileAccess2> xNameAccess = + packages::zip::ZipFileAccess::createWithURL( + comphelper::getProcessComponentContext(), aTransBuf.makeStringAndClear()); + if (!xNameAccess.is()) + continue; + uno::Reference<io::XInputStream> xInputStream(xNameAccess->getByName(sZippedFile), uno::UNO_QUERY); + if (!xInputStream.is()) + continue; + OStringBuffer sStr; + for (;;) + { + sal_Int32 const size = 2048; + css::uno::Sequence< sal_Int8 > data(size); + sal_Int32 n = xInputStream->readBytes(data, size); + sStr.append(reinterpret_cast<const sal_Char *>(data.getConstArray()), n); + if (n < size) + break; + } + + xmlreader::XmlReader reader(const_cast<char *>(sStr.getStr()), sStr.getLength()); handleTranslations(reader); break; } |