Support for gettext in MacOSX application bundle

The MacOSX applications bundle needs to be told where to bind the
text domain from.

Also copy the gettext .mo files in the install-macosx target.

[Dirk Hohndel: minor change in main(): move the path declaration to
               the beginning of the function]

Signed-off-by: Henrik Brautaset Aronsen <subsurface@henrik.synth.no>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Henrik Brautaset Aronsen 2012-10-15 14:44:01 +02:00 committed by Dirk Hohndel
parent 5c432d3c8a
commit ef039c9d32
6 changed files with 31 additions and 1 deletions

View file

@ -154,6 +154,10 @@ install-macosx: $(NAME)
$(INSTALL) $(MACOSXFILES)/Info.plist $(MACOSXINSTALL)/Contents/
$(INSTALL) $(ICONFILE) $(MACOSXINSTALL)/Contents/Resources/
$(INSTALL) $(MACOSXFILES)/Subsurface.icns $(MACOSXINSTALL)/Contents/Resources/
$(INSTALL) -d -m 755 $(addprefix $(MACOSXINSTALL)/Contents/Resources/,$(dir $(MSGOBJS)))
for MSG in $(MSGOBJS); do\
install $$MSG $(MACOSXINSTALL)/Contents/Resources/$$MSG;\
done
file.o: file.c dive.h file.h
$(CC) $(CFLAGS) $(GLIB2CFLAGS) $(XML2CFLAGS) $(XSLT) $(ZIP) -c file.c

1
dive.h
View file

@ -435,6 +435,7 @@ extern const char *star_strings[];
extern const char *default_filename;
extern const char *existing_filename;
extern const char *subsurface_default_filename(void);
extern const char *subsurface_gettext_domainpath(void);
extern void subsurface_command_line_init(gint *, gchar ***);
extern void subsurface_command_line_exit(gint *, gchar ***);
#define AIR_PERMILLE 209

View file

@ -84,6 +84,11 @@ const char *subsurface_default_filename()
}
}
const char *subsurface_gettext_domainpath()
{
return "./locale";
}
void subsurface_ui_setup(GtkSettings *settings, GtkWidget *menubar,
GtkWidget *vbox, GtkUIManager *ui_manager)
{

13
macos.c
View file

@ -104,6 +104,19 @@ const char *subsurface_default_filename()
}
}
const char *subsurface_gettext_domainpath()
{
CFBundleRef mainBundle = CFBundleGetMainBundle();
CFURLRef localeURL = CFBundleCopyResourceURL(mainBundle, CFSTR("locale"), CFSTR(""), NULL);
if (localeURL) {
CFStringRef localePath = CFURLCopyFileSystemPath(localeURL, kCFURLPOSIXPathStyle);
CFStringEncoding encodingMethod = CFStringGetSystemEncoding();
const char *path = CFStringGetCStringPtr(localePath, encodingMethod);
return path;
}
return "./locale";
}
static void show_main_window(GtkWidget *w, gpointer data)
{
gtk_widget_show(main_window);

4
main.c
View file

@ -225,12 +225,14 @@ int main(int argc, char **argv)
{
int i;
gboolean no_filenames = TRUE;
const char *path;
/* set up l18n - the search directory needs to change
* so that it uses the correct system directory when
* subsurface isn't run from the local directory */
setlocale( LC_ALL, "" );
bindtextdomain("subsurface", "./locale");
path = subsurface_gettext_domainpath();
bindtextdomain("subsurface", path);
bind_textdomain_codeset("subsurface", "utf-8");
textdomain("subsurface");
output_units = SI_units;

View file

@ -151,6 +151,11 @@ const char *subsurface_default_filename()
}
}
const char *subsurface_gettext_domainpath()
{
return "./locale";
}
void subsurface_ui_setup(GtkSettings *settings, GtkWidget *menubar,
GtkWidget *vbox, GtkUIManager *ui_manager)
{