diff --git a/Config.in b/Config.in
index c9ef24a63dcc126e346db40780bcdc4f9469fe9f..cbca0374498d66954048d6497b1fe6de58f0609c 100644
--- a/Config.in
+++ b/Config.in
@@ -140,6 +140,13 @@ menu "Global build settings"
 		  In case software provides optional support for patented functionality,
 		  this optional support will get disabled for this package.
 
+	config BUILD_NLS
+		default n
+		bool "Compile with full language support"
+		help
+		  When this option is enabled, packages are built with the full versions of iconv and GNU gettext
+		  instead of the default OpenWrt stubs.
+
 	config SHADOW_PASSWORDS
 		bool
 		prompt "Enable shadow password support"
diff --git a/include/nls.mk b/include/nls.mk
new file mode 100644
index 0000000000000000000000000000000000000000..7743da470a0b8071d4cfc9f02a95ef21928e8279
--- /dev/null
+++ b/include/nls.mk
@@ -0,0 +1,40 @@
+#
+# Copyright (C) 2011 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+# iconv full
+ifeq ($(CONFIG_BUILD_NLS),y)
+	ICONV_PREFIX:=$(STAGING_DIR)/usr/lib/libiconv-full
+	ICONV_FULL:=1
+
+	INTL_PREFIX:=$(STAGING_DIR)/usr/lib/libintl-full
+	INTL_FULL:=1
+
+# iconv stub
+else
+	ICONV_PREFIX:=$(STAGING_DIR)/usr/lib/libiconv-stub
+	ICONV_FULL:=
+
+	INTL_PREFIX:=$(STAGING_DIR)/usr/lib/libintl-stub
+	INTL_FULL:=
+endif
+
+PKG_CONFIG_DEPENDS += CONFIG_BUILD_NLS
+PKG_BUILD_DEPENDS += !BUILD_NLS:libiconv !BUILD_NLS:gettext
+
+ICONV_DEPENDS:=+BUILD_NLS:libiconv-full
+ICONV_CFLAGS:=-I$(ICONV_PREFIX)/include
+ICONV_CPPFLAGS:=-I$(ICONV_PREFIX)/include
+ICONV_LDFLAGS:=-L$(ICONV_PREFIX)/lib
+
+INTL_DEPENDS:=+BUILD_NLS:libintl-full
+INTL_CFLAGS:=-I$(INTL_PREFIX)/include
+INTL_CPPFLAGS:=-I$(INTL_PREFIX)/include
+INTL_LDFLAGS:=-L$(INTL_PREFIX)/lib
+
+TARGET_CFLAGS += $(ICONV_CFLAGS) $(INTL_CFLAGS)
+TARGET_CPPFLAGS += $(ICONV_CFLAGS) $(INTL_CPPFLAGS)
+TARGET_LDFLAGS += $(ICONV_LDFLAGS) $(INTL_LDFLAGS)