summaryrefslogtreecommitdiff
path: root/vcl/source
diff options
context:
space:
mode:
authorMatúš Kukan <matus.kukan@collabora.com>2013-12-03 08:19:36 +0100
committerDavid Tardon <dtardon@redhat.com>2013-12-06 05:43:21 -0600
commitc2f5e09900561d417d53a74fd6bc189cb7d898e1 (patch)
tree93580181d603dcdcfb73f5950cbed019be8c1a88 /vcl/source
parent9a37ce189881f12d678fdb054219b13c3e4c7e40 (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.cxx35
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;
}