mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-09-05 19:08:17 +00:00
build: allow disabling i18n (#8158)
This commit is contained in:
16
build.zig
16
build.zig
@@ -27,7 +27,7 @@ pub fn build(b: *std.Build) !void {
|
||||
|
||||
// Ghostty resources like terminfo, shell integration, themes, etc.
|
||||
const resources = try buildpkg.GhosttyResources.init(b, &config);
|
||||
const i18n = try buildpkg.GhosttyI18n.init(b, &config);
|
||||
const i18n = if (config.i18n) try buildpkg.GhosttyI18n.init(b, &config) else null;
|
||||
|
||||
// Ghostty dependencies used by many artifacts.
|
||||
const deps = try buildpkg.SharedDeps.init(b, &config);
|
||||
@@ -79,7 +79,7 @@ pub fn build(b: *std.Build) !void {
|
||||
if (config.app_runtime != .none) {
|
||||
exe.install();
|
||||
resources.install();
|
||||
i18n.install();
|
||||
if (i18n) |v| v.install();
|
||||
} else {
|
||||
// Libghostty
|
||||
//
|
||||
@@ -112,7 +112,7 @@ pub fn build(b: *std.Build) !void {
|
||||
// The xcframework build always installs resources because our
|
||||
// macOS xcode project contains references to them.
|
||||
resources.install();
|
||||
i18n.install();
|
||||
if (i18n) |v| v.install();
|
||||
}
|
||||
|
||||
// Ghostty macOS app
|
||||
@@ -122,7 +122,7 @@ pub fn build(b: *std.Build) !void {
|
||||
.{
|
||||
.xcframework = &xcframework,
|
||||
.docs = &docs,
|
||||
.i18n = &i18n,
|
||||
.i18n = if (i18n) |v| &v else null,
|
||||
.resources = &resources,
|
||||
},
|
||||
);
|
||||
@@ -166,7 +166,7 @@ pub fn build(b: *std.Build) !void {
|
||||
.{
|
||||
.xcframework = &xcframework_native,
|
||||
.docs = &docs,
|
||||
.i18n = &i18n,
|
||||
.i18n = if (i18n) |v| &v else null,
|
||||
.resources = &resources,
|
||||
},
|
||||
);
|
||||
@@ -204,5 +204,9 @@ pub fn build(b: *std.Build) !void {
|
||||
|
||||
// update-translations does what it sounds like and updates the "pot"
|
||||
// files. These should be committed to the repo.
|
||||
translations_step.dependOn(i18n.update_step);
|
||||
if (i18n) |v| {
|
||||
translations_step.dependOn(v.update_step);
|
||||
} else {
|
||||
try translations_step.addError("cannot update translations when i18n is disabled", .{});
|
||||
}
|
||||
}
|
||||
|
@@ -37,6 +37,7 @@ font_backend: font.Backend = .freetype,
|
||||
x11: bool = false,
|
||||
wayland: bool = false,
|
||||
sentry: bool = true,
|
||||
i18n: bool = true,
|
||||
wasm_shared: bool = true,
|
||||
|
||||
/// Ghostty exe properties
|
||||
@@ -175,6 +176,16 @@ pub fn init(b: *std.Build) !Config {
|
||||
"Enables linking against X11 libraries when using the GTK rendering backend.",
|
||||
) orelse gtk_targets.x11;
|
||||
|
||||
config.i18n = b.option(
|
||||
bool,
|
||||
"i18n",
|
||||
"Enables gettext-based internationalization. Enabled by default only for macOS, and other Unix-like systems like Linux and FreeBSD when using glibc.",
|
||||
) orelse switch (target.result.os.tag) {
|
||||
.macos, .ios => true,
|
||||
.linux, .freebsd => target.result.isGnuLibC(),
|
||||
else => false,
|
||||
};
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// Ghostty Exe Properties
|
||||
|
||||
@@ -420,6 +431,7 @@ pub fn addOptions(self: *const Config, step: *std.Build.Step.Options) !void {
|
||||
step.addOption(bool, "x11", self.x11);
|
||||
step.addOption(bool, "wayland", self.wayland);
|
||||
step.addOption(bool, "sentry", self.sentry);
|
||||
step.addOption(bool, "i18n", self.i18n);
|
||||
step.addOption(apprt.Runtime, "app_runtime", self.app_runtime);
|
||||
step.addOption(font.Backend, "font_backend", self.font_backend);
|
||||
step.addOption(rendererpkg.Impl, "renderer", self.renderer);
|
||||
@@ -467,6 +479,7 @@ pub fn fromOptions() Config {
|
||||
.exe_entrypoint = std.meta.stringToEnum(ExeEntrypoint, @tagName(options.exe_entrypoint)).?,
|
||||
.wasm_target = std.meta.stringToEnum(WasmTarget, @tagName(options.wasm_target)).?,
|
||||
.wasm_shared = options.wasm_shared,
|
||||
.i18n = options.i18n,
|
||||
};
|
||||
}
|
||||
|
||||
|
@@ -17,7 +17,7 @@ xctest: *std.Build.Step.Run,
|
||||
pub const Deps = struct {
|
||||
xcframework: *const XCFramework,
|
||||
docs: *const Docs,
|
||||
i18n: *const I18n,
|
||||
i18n: ?*const I18n,
|
||||
resources: *const Resources,
|
||||
};
|
||||
|
||||
@@ -81,7 +81,7 @@ pub fn init(
|
||||
// We also need all these resources because the xcode project
|
||||
// references them via symlinks.
|
||||
deps.resources.addStepDependencies(&step.step);
|
||||
deps.i18n.addStepDependencies(&step.step);
|
||||
if (deps.i18n) |v| v.addStepDependencies(&step.step);
|
||||
deps.docs.installDummy(&step.step);
|
||||
|
||||
// Expect success
|
||||
@@ -113,7 +113,7 @@ pub fn init(
|
||||
// We also need all these resources because the xcode project
|
||||
// references them via symlinks.
|
||||
deps.resources.addStepDependencies(&step.step);
|
||||
deps.i18n.addStepDependencies(&step.step);
|
||||
if (deps.i18n) |v| v.addStepDependencies(&step.step);
|
||||
deps.docs.installDummy(&step.step);
|
||||
|
||||
// Expect success
|
||||
|
@@ -41,6 +41,7 @@ pub const flatpak = options.flatpak;
|
||||
pub const app_runtime: apprt.Runtime = config.app_runtime;
|
||||
pub const font_backend: font.Backend = config.font_backend;
|
||||
pub const renderer: rendererpkg.Impl = config.renderer;
|
||||
pub const i18n: bool = config.i18n;
|
||||
|
||||
/// The bundle ID for the app. This is used in many places and is currently
|
||||
/// hardcoded here. We could make this configurable in the future if there
|
||||
|
@@ -73,6 +73,8 @@ pub const InitError = error{
|
||||
/// want to set the domain for the entire application since this is also
|
||||
/// used by libghostty.
|
||||
pub fn init(resources_dir: []const u8) InitError!void {
|
||||
if (comptime !build_config.i18n) return;
|
||||
|
||||
switch (builtin.os.tag) {
|
||||
// i18n is unsupported on Windows
|
||||
.windows => return,
|
||||
@@ -102,11 +104,13 @@ pub fn init(resources_dir: []const u8) InitError!void {
|
||||
/// This should only be called for apprts that are fully owning the
|
||||
/// Ghostty application. This should not be called for libghostty users.
|
||||
pub fn initGlobalDomain() error{OutOfMemory}!void {
|
||||
if (comptime !build_config.i18n) return;
|
||||
_ = textdomain(build_config.bundle_id) orelse return error.OutOfMemory;
|
||||
}
|
||||
|
||||
/// Translate a message for the Ghostty domain.
|
||||
pub fn _(msgid: [*:0]const u8) [*:0]const u8 {
|
||||
if (comptime !build_config.i18n) return msgid;
|
||||
return dgettext(build_config.bundle_id, msgid);
|
||||
}
|
||||
|
||||
@@ -132,6 +136,8 @@ pub fn canonicalizeLocale(
|
||||
buf: []u8,
|
||||
locale: []const u8,
|
||||
) error{NoSpaceLeft}![:0]const u8 {
|
||||
if (comptime !build_config.i18n) return locale;
|
||||
|
||||
// Fix zh locales for macOS
|
||||
if (fixZhLocale(locale)) |fixed| {
|
||||
if (buf.len < fixed.len + 1) return error.NoSpaceLeft;
|
||||
|
Reference in New Issue
Block a user