summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
authorTor Lillqvist <tml@collabora.com>2018-12-10 16:12:08 +0200
committerTor Lillqvist <tml@collabora.com>2018-12-10 21:39:03 +0100
commit36beb79184e5f4153c8cc92b176b21b697594228 (patch)
treec4d88424b33ac19d7f6a6e3db9ec6172462d7f32 /desktop
parentb0789a2cd82f8bf1e16fb9212a608068d99a2344 (diff)
Add a localisation API to LibreOfficeKitClass
Combines the LanguageTag::Create() and Translate::get() functionality. Also add an ABI test for the Kit class in the LibreOfficeKit unit test, and a test for the translation function. (In this branch there is no Translate::nget() so no such functionality.) Change-Id: I78c48a8bbb434d6f204869290822830288022a53 Reviewed-on: https://gerrit.libreoffice.org/64894 Reviewed-by: Tor Lillqvist <tml@collabora.com> Tested-by: Tor Lillqvist <tml@collabora.com>
Diffstat (limited to 'desktop')
-rw-r--r--desktop/qa/desktop_lib/test_desktop_lib.cxx37
-rw-r--r--desktop/source/lib/init.cxx23
2 files changed, 60 insertions, 0 deletions
diff --git a/desktop/qa/desktop_lib/test_desktop_lib.cxx b/desktop/qa/desktop_lib/test_desktop_lib.cxx
index 2b571921738c..7a5756e5ed35 100644
--- a/desktop/qa/desktop_lib/test_desktop_lib.cxx
+++ b/desktop/qa/desktop_lib/test_desktop_lib.cxx
@@ -32,6 +32,7 @@
#include <comphelper/propertysequence.hxx>
#include <osl/conditn.hxx>
#include <svl/srchitem.hxx>
+#include <svtools/strings.hrc>
#include <LibreOfficeKit/LibreOfficeKitEnums.h>
#include <unotools/tempfile.hxx>
#include <sfx2/viewsh.hxx>
@@ -117,6 +118,7 @@ public:
void testCommentsImpress();
void testCommentsCallbacksWriter();
void testRunMacro();
+ void testTranslate();
void testExtractParameter();
void testGetSignatureState_NonSigned();
void testGetSignatureState_Signed();
@@ -164,6 +166,7 @@ public:
CPPUNIT_TEST(testCommentsImpress);
CPPUNIT_TEST(testCommentsCallbacksWriter);
CPPUNIT_TEST(testRunMacro);
+ CPPUNIT_TEST(testTranslate);
CPPUNIT_TEST(testExtractParameter);
CPPUNIT_TEST(testGetSignatureState_Signed);
CPPUNIT_TEST(testGetSignatureState_NonSigned);
@@ -2218,6 +2221,20 @@ void DesktopLOKTest::testRunMacro()
comphelper::LibreOfficeKit::setActive(false);
}
+void DesktopLOKTest::testTranslate()
+{
+ comphelper::LibreOfficeKit::setActive();
+
+ LibLibreOffice_Impl aOffice;
+
+ // Try translating to a non-existent locale, should return the English string
+ char *translated = aOffice.m_pOfficeClass->translateGet(&aOffice, STR_DESCRIPTION_FACTORY_WRITER, "svt", "foo");
+ CPPUNIT_ASSERT_EQUAL(0, strcmp(translated, "Text Document"));
+ free(translated);
+
+ comphelper::LibreOfficeKit::setActive(false);
+}
+
void DesktopLOKTest::testExtractParameter()
{
comphelper::LibreOfficeKit::setActive();
@@ -2462,6 +2479,11 @@ void DesktopLOKTest::testInsertCertificatePEM()
namespace {
+size_t classOffset(int i)
+{
+ return sizeof(static_cast<struct _LibreOfficeKitClass*>(nullptr)->nSize) + i * sizeof(void*);
+}
+
size_t documentClassOffset(int i)
{
return sizeof(static_cast<struct _LibreOfficeKitDocumentClass*>(nullptr)->nSize) + i * sizeof(void*);
@@ -2472,6 +2494,21 @@ size_t documentClassOffset(int i)
void DesktopLOKTest::testABI()
{
// STABLE ABI, NEVER CHANGE (unless there's a very good reason, agreed by ESC, etc.)
+
+ CPPUNIT_ASSERT_EQUAL(classOffset(0), offsetof(struct _LibreOfficeKitClass, destroy));
+ CPPUNIT_ASSERT_EQUAL(classOffset(1), offsetof(struct _LibreOfficeKitClass, documentLoad));
+ CPPUNIT_ASSERT_EQUAL(classOffset(2), offsetof(struct _LibreOfficeKitClass, getError));
+ CPPUNIT_ASSERT_EQUAL(classOffset(3), offsetof(struct _LibreOfficeKitClass, documentLoadWithOptions));
+ CPPUNIT_ASSERT_EQUAL(classOffset(4), offsetof(struct _LibreOfficeKitClass, freeError));
+ CPPUNIT_ASSERT_EQUAL(classOffset(5), offsetof(struct _LibreOfficeKitClass, registerCallback));
+ CPPUNIT_ASSERT_EQUAL(classOffset(6), offsetof(struct _LibreOfficeKitClass, getFilterTypes));
+ CPPUNIT_ASSERT_EQUAL(classOffset(7), offsetof(struct _LibreOfficeKitClass, setOptionalFeatures));
+ CPPUNIT_ASSERT_EQUAL(classOffset(8), offsetof(struct _LibreOfficeKitClass, setDocumentPassword));
+ CPPUNIT_ASSERT_EQUAL(classOffset(9), offsetof(struct _LibreOfficeKitClass, getVersionInfo));
+ CPPUNIT_ASSERT_EQUAL(classOffset(10), offsetof(struct _LibreOfficeKitClass, runMacro));
+ CPPUNIT_ASSERT_EQUAL(classOffset(11), offsetof(struct _LibreOfficeKitClass, translateGet));
+ CPPUNIT_ASSERT_EQUAL(classOffset(12), offsetof(struct _LibreOfficeKitClass, translateNGet));
+
CPPUNIT_ASSERT_EQUAL(documentClassOffset(0), offsetof(struct _LibreOfficeKitDocumentClass, destroy));
CPPUNIT_ASSERT_EQUAL(documentClassOffset(1), offsetof(struct _LibreOfficeKitDocumentClass, saveAs));
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 42a06ce2be6c..2bb9ba95b3fd 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -1423,6 +1423,8 @@ static void lo_setDocumentPassword(LibreOfficeKit* pThis,
const char* pPassword);
static char* lo_getVersionInfo(LibreOfficeKit* pThis);
static int lo_runMacro (LibreOfficeKit* pThis, const char* pURL);
+static char* lo_translateGet (LibreOfficeKit *pThis, const char* pId, const char* pPrefixName, const char* pBcp47LanguageTag);
+static char* lo_translateNGet (LibreOfficeKit *pThis, const char* pId, int n, const char* pPrefixName, const char* pBcp47LanguageTag);
LibLibreOffice_Impl::LibLibreOffice_Impl()
: m_pOfficeClass( gOfficeClass.lock() )
@@ -1446,6 +1448,8 @@ LibLibreOffice_Impl::LibLibreOffice_Impl()
m_pOfficeClass->setDocumentPassword = lo_setDocumentPassword;
m_pOfficeClass->getVersionInfo = lo_getVersionInfo;
m_pOfficeClass->runMacro = lo_runMacro;
+ m_pOfficeClass->translateGet = lo_translateGet;
+ m_pOfficeClass->translateNGet = lo_translateNGet;
gOfficeClass = m_pOfficeClass;
}
@@ -1673,6 +1677,25 @@ static int lo_runMacro(LibreOfficeKit* pThis, const char *pURL)
return false;
}
+static char* lo_translateGet(LibreOfficeKit *, const char* pId, const char* pPrefixName, const char* pBcp47LanguageTag)
+{
+ LanguageTag tag(OUString::fromUtf8(pBcp47LanguageTag));
+ std::locale locale = Translate::Create(pPrefixName, tag);
+ OUString result = Translate::get(pId, locale);
+
+ return strdup(result.toUtf8().getStr());
+}
+
+static char* lo_translateNGet(LibreOfficeKit *, const char* pId, int, const char* pPrefixName, const char* pBcp47LanguageTag)
+{
+ LanguageTag tag(OUString::fromUtf8(pBcp47LanguageTag));
+ std::locale locale = Translate::Create(pPrefixName, tag);
+ // In this branch there is no Translate::nget().
+ OUString result = Translate::get(pId, locale);
+
+ return strdup(result.toUtf8().getStr());
+}
+
static void lo_registerCallback (LibreOfficeKit* pThis,
LibreOfficeKitCallback pCallback,
void* pData)