aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2021-08-27 11:15:54 +0200
committerPierre Ossman <ossman@cendio.se>2021-08-27 14:49:10 +0200
commit810b35ae90059b9a3d79e98bcef9cf15b891a62c (patch)
tree9cd564e5e2e68c8afb105da45895880bacb22d2b
parente7f8370ffc7371fc1fb175896c7952d99be95312 (diff)
downloadtigervnc-810b35ae90059b9a3d79e98bcef9cf15b891a62c.tar.gz
tigervnc-810b35ae90059b9a3d79e98bcef9cf15b891a62c.zip
Include translations in macOS and Windows builds
-rw-r--r--release/makemacapp.in6
-rw-r--r--release/tigervnc.iss.in8
-rw-r--r--vncviewer/vncviewer.cxx63
3 files changed, 76 insertions, 1 deletions
diff --git a/release/makemacapp.in b/release/makemacapp.in
index 2bfd869e..0c3f9626 100644
--- a/release/makemacapp.in
+++ b/release/makemacapp.in
@@ -67,6 +67,12 @@ fi
install -m 644 $SRCDIR/release/tigervnc.icns "$APPROOT/Contents/Resources/"
install -m 644 release/Info.plist "$APPROOT/Contents/"
+for lang in `cat "$SRCDIR/po/LINGUAS"`; do
+ mkdir -p "$APPROOT/Contents/Resources/locale/$lang/LC_MESSAGES"
+ install -m 644 po/$lang.mo \
+ "$APPROOT/Contents/Resources/locale/$lang/LC_MESSAGES/tigervnc.mo"
+done
+
install -m 644 $SRCDIR/LICENCE.TXT $TMPDIR/dmg/
install -m 644 $SRCDIR/README.rst $TMPDIR/dmg/
diff --git a/release/tigervnc.iss.in b/release/tigervnc.iss.in
index a7b9b701..bad0290b 100644
--- a/release/tigervnc.iss.in
+++ b/release/tigervnc.iss.in
@@ -23,6 +23,14 @@ Source: "@CMAKE_BINARY_DIR@\vncviewer\vncviewer.exe"; DestDir: "{app}"; Flags: i
Source: "@CMAKE_SOURCE_DIR@\README.rst"; DestDir: "{app}"; Flags: ignoreversion
Source: "@CMAKE_SOURCE_DIR@\LICENCE.TXT"; DestDir: "{app}"; Flags: ignoreversion
+#define LINGUAS
+#define Lang
+#sub AddLanguage
+ #define Lang = FileRead(LINGUAS)
+ Source: "@CMAKE_BINARY_DIR@\po\{#Lang}.mo"; DestDir: "{app}\locale\{#Lang}\LC_MESSAGES"; DestName: "tigervnc.mo"; Flags: ignoreversion
+#endsub
+#for {LINGUAS = FileOpen("@CMAKE_SOURCE_DIR@\po\LINGUAS"); !FileEof(LINGUAS); ""} AddLanguage
+
[Icons]
Name: "{group}\TigerVNC Viewer"; FileName: "{app}\vncviewer.exe";
Name: "{group}\Listening TigerVNC Viewer"; FileName: "{app}\vncviewer.exe"; Parameters: "-listen";
diff --git a/vncviewer/vncviewer.cxx b/vncviewer/vncviewer.cxx
index 1092f1f4..2a81ffd3 100644
--- a/vncviewer/vncviewer.cxx
+++ b/vncviewer/vncviewer.cxx
@@ -40,6 +40,10 @@
#define mkdir(path, mode) _mkdir(path)
#endif
+#ifdef __APPLE__
+#include <Carbon/Carbon.h>
+#endif
+
#if !defined(WIN32) && !defined(__APPLE__)
#include <X11/Xlib.h>
#include <X11/XKBlib.h>
@@ -261,6 +265,57 @@ static void CleanupSignalHandler(int sig)
exit(1);
}
+static const char* getlocaledir()
+{
+#if defined(WIN32)
+ static char localebuf[PATH_MAX];
+ char *slash;
+
+ GetModuleFileName(NULL, localebuf, sizeof(localebuf));
+
+ slash = strrchr(localebuf, '\\');
+ if (slash == NULL)
+ return NULL;
+
+ *slash = '\0';
+
+ if ((strlen(localebuf) + strlen("\\locale")) >= sizeof(localebuf))
+ return NULL;
+
+ strcat(localebuf, "\\locale");
+
+ return localebuf;
+#elif defined(__APPLE__)
+ CFBundleRef bundle;
+ CFURLRef localeurl;
+ CFStringRef localestr;
+ Boolean ret;
+
+ static char localebuf[PATH_MAX];
+
+ bundle = CFBundleGetMainBundle();
+ if (bundle == NULL)
+ return NULL;
+
+ localeurl = CFBundleCopyResourceURL(bundle, CFSTR("locale"),
+ NULL, NULL);
+ if (localeurl == NULL)
+ return NULL;
+
+ localestr = CFURLCopyFileSystemPath(localeurl, kCFURLPOSIXPathStyle);
+
+ CFRelease(localeurl);
+
+ ret = CFStringGetCString(localestr, localebuf, sizeof(localebuf),
+ kCFStringEncodingUTF8);
+ if (!ret)
+ return NULL;
+
+ return localebuf;
+#else
+ return CMAKE_INSTALL_FULL_LOCALEDIR;
+#endif
+}
static void init_fltk()
{
// Basic text size (10pt @ 96 dpi => 13px)
@@ -588,12 +643,18 @@ static int mktunnel()
int main(int argc, char** argv)
{
+ const char *localedir;
UserDialog dlg;
argv0 = argv[0];
setlocale(LC_ALL, "");
- bindtextdomain(PACKAGE_NAME, CMAKE_INSTALL_FULL_LOCALEDIR);
+
+ localedir = getlocaledir();
+ if (localedir == NULL)
+ fprintf(stderr, "Failed to determine locale directory\n");
+ else
+ bindtextdomain(PACKAGE_NAME, localedir);
textdomain(PACKAGE_NAME);
// Write about text to console, still using normal locale codeset