#
# Native language support configuration
#

menuconfig NLS
	tristate "Native language support"
	---help---
	  The base Native Language Support. A number of filesystems
	  depend on it (e.g. FAT, JOLIET, NT, BEOS filesystems), as well
	  as the ability of some filesystems to use native languages
	  (NCP, SMB).

	  If unsure, say Y.

	  To compile this code as a module, choose M here: the module
	  will be called nls_base.

if NLS

config NLS_DEFAULT
	string "Default NLS Option"
	default "iso8859-1"
	---help---
	  The default NLS used when mounting file system. Note, that this is
	  the NLS used by your console, not the NLS used by a specific file
	  system (if different) to store data (filenames) on a disk.
	  Currently, the valid values are:
	  big5, cp437, cp737, cp775, cp850, cp852, cp855, cp857, cp860, cp861,
	  cp862, cp863, cp864, cp865, cp866, cp869, cp874, cp932, cp936,
	  cp949, cp950, cp1251, cp1255, euc-jp, euc-kr, gb2312, iso8859-1,
	  iso8859-2, iso8859-3, iso8859-4, iso8859-5, iso8859-6, iso8859-7,
	  iso8859-8, iso8859-9, iso8859-13, iso8859-14, iso8859-15,
	  koi8-r, koi8-ru, koi8-u, sjis, tis-620, utf8.
	  If you specify a wrong value, it will use the built-in NLS;
	  compatible with iso8859-1.

	  If unsure, specify it as "iso8859-1".

config NLS_CODEPAGE_437
	tristate "Codepage 437 (United States, Canada)"
	help
	  The Microsoft FAT file system family can deal with filenames in
	  native language character sets. These character sets are stored
	  in so-called DOS codepages. You need to include the appropriate
	  codepage if you want to be able to read/write these filenames on
	  DOS/Windows partitions correctly. This does apply to the filenames
	  only, not to the file contents. You can include several codepages;
	  say Y here if you want to include the DOS codepage that is used in
	  the United States and parts of Canada. This is recommended.

config NLS_CODEPAGE_737
	tristate "Codepage 737 (Greek)"
	help
	  The Microsoft FAT file system family can deal with filenames in
	  native language character sets. These character sets are stored
	  in so-called DOS codepages. You need to include the appropriate
	  codepage if you want to be able to read/write these filenames on
	  DOS/Windows partitions correctly. This does apply to the filenames
	  only, not to the file contents. You can include several codepages;
	  say Y here if you want to include the DOS codepage that is used for
	  Greek. If unsure, say N.

config NLS_CODEPAGE_775
	tristate "Codepage 775 (Baltic Rim)"
	help
	  The Microsoft FAT file system family can deal with filenames in
	  native language character sets. These character sets are stored
	  in so-called DOS codepages. You need to include the appropriate
	  codepage if you want to be able to read/write these filenames on
	  DOS/Windows partitions correctly. This does apply to the filenames
	  only, not to the file contents. You can include several codepages;
	  say Y here if you want to include the DOS codepage that is used
	  for the Baltic Rim Languages (Latvian and Lithuanian). If unsure,
	  say N.

config NLS_CODEPAGE_850
	tristate "Codepage 850 (Europe)"
	---help---
	  The Microsoft FAT file system family can deal with filenames in
	  native language character sets. These character sets are stored in
	  so-called DOS codepages. You need to include the appropriate
	  codepage if you want to be able to read/write these filenames on
	  DOS/Windows partitions correctly. This does apply to the filenames
	  only, not to the file contents. You can include several codepages;
	  say Y here if you want to include the DOS codepage that is used for
	  much of Europe -- United Kingdom, Germany, Spain, Italy, and [add
	  more countries here]. It has some characters useful to many European
	  languages that are not part of the US codepage 437.

	  If unsure, say Y.

config NLS_CODEPAGE_852
	tristate "Codepage 852 (Central/Eastern Europe)"
	---help---
	  The Microsoft FAT file system family can deal with filenames in
	  native language character sets. These character sets are stored in
	  so-called DOS codepages. You need to include the appropriate
	  codepage if you want to be able to read/write these filenames on
	  DOS/Windows partitions correctly. This does apply to the filenames
	  only, not to the file contents. You can include several codepages;
	  say Y here if you want to include the Latin 2 codepage used by DOS
	  for much of Central and Eastern Europe. It has all the required
	  characters for these languages: Albanian, Croatian, Czech, English,
	  Finnish, Hungarian, Irish, German, Polish, Romanian, Serbian (Latin
	  transcription), Slovak, Slovenian, and Sorbian.

config NLS_CODEPAGE_855
	tristate "Codepage 855 (Cyrillic)"
	help
	  The Microsoft FAT file system family can deal with filenames in
	  native language character sets. These character sets are stored in
	  so-called DOS codepages. You need to include the appropriate
	  codepage if you want to be able to read/write these filenames on
	  DOS/Windows partitions correctly. This does apply to the filenames
	  only, not to the file contents. You can include several codepages;
	  say Y here if you want to include the DOS codepage for Cyrillic.

config NLS_CODEPAGE_857
	tristate "Codepage 857 (Turkish)"
	help
	  The Microsoft FAT file system family can deal with filenames in
	  native language character sets. These character sets are stored in
	  so-called DOS codepages. You need to include the appropriate
	  codepage if you want to be able to read/write these filenames on
	  DOS/Windows partitions correctly. This does apply to the filenames
	  only, not to the file contents. You can include several codepages;
	  say Y here if you want to include the DOS codepage for Turkish.

config NLS_CODEPAGE_860
	tristate "Codepage 860 (Portuguese)"
	help
	  The Microsoft FAT file system family can deal with filenames in
	  native language character sets. These character sets are stored in
	  so-called DOS codepages. You need to include the appropriate
	  codepage if you want to be able to read/write these filenames on
	  DOS/Windows partitions correctly. This does apply to the filenames
	  only, not to the file contents. You can include several codepages;
	  say Y here if you want to include the DOS codepage for Portuguese.

config NLS_CODEPAGE_861
	tristate "Codepage 861 (Icelandic)"
	help
	  The Microsoft FAT file system family can deal with filenames in
	  native language character sets. These character sets are stored in
	  so-called DOS codepages. You need to include the appropriate
	  codepage if you want to be able to read/write these filenames on
	  DOS/Windows partitions correctly. This does apply to the filenames
	  only, not to the file contents. You can include several codepages;
	  say Y here if you want to include the DOS codepage for Icelandic.

config NLS_CODEPAGE_862
	tristate "Codepage 862 (Hebrew)"
	help
	  The Microsoft FAT file system family can deal with filenames in
	  native language character sets. These character sets are stored in
	  so-called DOS codepages. You need to include the appropriate
	  codepage if you want to be able to read/write these filenames on
	  DOS/Windows partitions correctly. This does apply to the filenames
	  only, not to the file contents. You can include several codepages;
	  say Y here if you want to include the DOS codepage for Hebrew.

config NLS_CODEPAGE_863
	tristate "Codepage 863 (Canadian French)"
	help
	  The Microsoft FAT file system family can deal with filenames in
	  native language character sets. These character sets are stored in
	  so-called DOS codepages. You need to include the appropriate
	  codepage if you want to be able to read/write these filenames on
	  DOS/Windows partitions correctly. This does apply to the filenames
	  only, not to the file contents. You can include several codepages;
	  say Y here if you want to include the DOS codepage for Canadian
	  French.

config NLS_CODEPAGE_864
	tristate "Codepage 864 (Arabic)"
	help
	  The Microsoft FAT file system family can deal with filenames in
	  native language character sets. These character sets are stored in
	  so-called DOS codepages. You need to include the appropriate
	  codepage if you want to be able to read/write these filenames on
	  DOS/Windows partitions correctly. This does apply to the filenames
	  only, not to the file contents. You can include several codepages;
	  say Y here if you want to include the DOS codepage for Arabic.

config NLS_CODEPAGE_865
	tristate "Codepage 865 (Norwegian, Danish)"
	help
	  The Microsoft FAT file system family can deal with filenames in
	  native language character sets. These character sets are stored in
	  so-called DOS codepages. You need to include the appropriate
	  codepage if you want to be able to read/write these filenames on
	  DOS/Windows partitions correctly. This does apply to the filenames
	  only, not to the file contents. You can include several codepages;
	  say Y here if you want to include the DOS codepage for the Nordic
	  European countries.

config NLS_CODEPAGE_866
	tristate "Codepage 866 (Cyrillic/Russian)"
	help
	  The Microsoft FAT file system family can deal with filenames in
	  native language character sets. These character sets are stored in
	  so-called DOS codepages. You need to include the appropriate
	  codepage if you want to be able to read/write these filenames on
	  DOS/Windows partitions correctly. This does apply to the filenames
	  only, not to the file contents. You can include several codepages;
	  say Y here if you want to include the DOS codepage for
	  Cyrillic/Russian.

config NLS_CODEPAGE_869
	tristate "Codepage 869 (Greek)"
	help
	  The Microsoft FAT file system family can deal with filenames in
	  native language character sets. These character sets are stored in
	  so-called DOS codepages. You need to include the appropriate
	  codepage if you want to be able to read/write these filenames on
	  DOS/Windows partitions correctly. This does apply to the filenames
	  only, not to the file contents. You can include several codepages;
	  say Y here if you want to include the DOS codepage for Greek.

config NLS_CODEPAGE_936
	tristate "Simplified Chinese charset (CP936, GB2312)"
	help
	  The Microsoft FAT file system family can deal with filenames in
	  native language character sets. These character sets are stored in
	  so-called DOS codepages. You need to include the appropriate
	  codepage if you want to be able to read/write these filenames on
	  DOS/Windows partitions correctly. This does apply to the filenames
	  only, not to the file contents. You can include several codepages;
	  say Y here if you want to include the DOS codepage for Simplified
	  Chinese(GBK).

config NLS_CODEPAGE_950
	tristate "Traditional Chinese charset (Big5)"
	help
	  The Microsoft FAT file system family can deal with filenames in
	  native language character sets. These character sets are stored in
	  so-called DOS codepages. You need to include the appropriate
	  codepage if you want to be able to read/write these filenames on
	  DOS/Windows partitions correctly. This does apply to the filenames
	  only, not to the file contents. You can include several codepages;
	  say Y here if you want to include the DOS codepage for Traditional
	  Chinese(Big5).

config NLS_CODEPAGE_932
	tristate "Japanese charsets (Shift-JIS, EUC-JP)"
	help
	  The Microsoft FAT file system family can deal with filenames in
	  native language character sets. These character sets are stored in
	  so-called DOS codepages. You need to include the appropriate
	  codepage if you want to be able to read/write these filenames on
	  DOS/Windows partitions correctly. This does apply to the filenames
	  only, not to the file contents. You can include several codepages;
	  say Y here if you want to include the DOS codepage for Shift-JIS
	  or EUC-JP. To use EUC-JP, you can use 'euc-jp' as mount option or
	  NLS Default value during kernel configuration, instead of 'cp932'.

config NLS_CODEPAGE_949
	tristate "Korean charset (CP949, EUC-KR)"
	help
	  The Microsoft FAT file system family can deal with filenames in
	  native language character sets. These character sets are stored in
	  so-called DOS codepages. You need to include the appropriate
	  codepage if you want to be able to read/write these filenames on
	  DOS/Windows partitions correctly. This does apply to the filenames
	  only, not to the file contents. You can include several codepages;
	  say Y here if you want to include the DOS codepage for UHC.

config NLS_CODEPAGE_874
	tristate "Thai charset (CP874, TIS-620)"
	help
	  The Microsoft FAT file system family can deal with filenames in
	  native language character sets. These character sets are stored in
	  so-called DOS codepages. You need to include the appropriate
	  codepage if you want to be able to read/write these filenames on
	  DOS/Windows partitions correctly. This does apply to the filenames
	  only, not to the file contents. You can include several codepages;
	  say Y here if you want to include the DOS codepage for Thai.

config NLS_ISO8859_8
	tristate "Hebrew charsets (ISO-8859-8, CP1255)"
	help
	  If you want to display filenames with native language characters
	  from the Microsoft FAT file system family or from JOLIET CD-ROMs
	  correctly on the screen, you need to include the appropriate
	  input/output character sets. Say Y here for ISO8859-8, the Hebrew
	  character set.

config NLS_CODEPAGE_1250
	tristate "Windows CP1250 (Slavic/Central European Languages)"
	help
	  If you want to display filenames with native language characters
	  from the Microsoft FAT file system family or from JOLIET CDROMs
	  correctly on the screen, you need to include the appropriate
	  input/output character sets. Say Y here for the Windows CP-1250
	  character set, which works for most Latin-written Slavic and Central
	  European languages: Czech, German, Hungarian, Polish, Rumanian, Croatian,
	  Slovak, Slovene.

config NLS_CODEPAGE_1251
	tristate "Windows CP1251 (Bulgarian, Belarusian)"
	help
	  The Microsoft FAT file system family can deal with filenames in
	  native language character sets. These character sets are stored in
	  so-called DOS codepages. You need to include the appropriate
	  codepage if you want to be able to read/write these filenames on
	  DOS/Windows partitions correctly. This does apply to the filenames
	  only, not to the file contents. You can include several codepages;
	  say Y here if you want to include the DOS codepage for Russian and
	  Bulgarian and Belarusian.

config NLS_ASCII
	tristate "ASCII (United States)"
	help
	  An ASCII NLS module is needed if you want to override the
	  DEFAULT NLS with this very basic charset and don't want any
	  non-ASCII characters to be translated.

config NLS_ISO8859_1
	tristate "NLS ISO 8859-1  (Latin 1; Western European Languages)"
	help
	  If you want to display filenames with native language characters
	  from the Microsoft FAT file system family or from JOLIET CD-ROMs
	  correctly on the screen, you need to include the appropriate
	  input/output character sets. Say Y here for the Latin 1 character
	  set, which covers most West European languages such as Albanian,
	  Catalan, Danish, Dutch, English, Faeroese, Finnish, French, German,
	  Galician, Irish, Icelandic, Italian, Norwegian, Portuguese, Spanish,
	  and Swedish. It is also the default for the US. If unsure, say Y.

config NLS_ISO8859_2
	tristate "NLS ISO 8859-2  (Latin 2; Slavic/Central European Languages)"
	help
	  If you want to display filenames with native language characters
	  from the Microsoft FAT file system family or from JOLIET CD-ROMs
	  correctly on the screen, you need to include the appropriate
	  input/output character sets. Say Y here for the Latin 2 character
	  set, which works for most Latin-written Slavic and Central European
	  languages: Czech, German, Hungarian, Polish, Rumanian, Croatian,
	  Slovak, Slovene.

config NLS_ISO8859_3
	tristate "NLS ISO 8859-3  (Latin 3; Esperanto, Galician, Maltese, Turkish)"
	help
	  If you want to display filenames with native language characters
	  from the Microsoft FAT file system family or from JOLIET CD-ROMs
	  correctly on the screen, you need to include the appropriate
	  input/output character sets. Say Y here for the Latin 3 character
	  set, which is popular with authors of Esperanto, Galician, Maltese,
	  and Turkish.

config NLS_ISO8859_4
	tristate "NLS ISO 8859-4  (Latin 4; old Baltic charset)"
	help
	  If you want to display filenames with native language characters
	  from the Microsoft FAT file system family or from JOLIET CD-ROMs
	  correctly on the screen, you need to include the appropriate
	  input/output character sets. Say Y here for the Latin 4 character
	  set which introduces letters for Estonian, Latvian, and
	  Lithuanian. It is an incomplete predecessor of Latin 7.

config NLS_ISO8859_5
	tristate "NLS ISO 8859-5  (Cyrillic)"
	help
	  If you want to display filenames with native language characters
	  from the Microsoft FAT file system family or from JOLIET CD-ROMs
	  correctly on the screen, you need to include the appropriate
	  input/output character sets. Say Y here for ISO8859-5, a Cyrillic
	  character set with which you can type Bulgarian, Belarusian,
	  Macedonian, Russian, Serbian, and Ukrainian. Note that the charset
	  KOI8-R is preferred in Russia.

config NLS_ISO8859_6
	tristate "NLS ISO 8859-6  (Arabic)"
	help
	  If you want to display filenames with native language characters
	  from the Microsoft FAT file system family or from JOLIET CD-ROMs
	  correctly on the screen, you need to include the appropriate
	  input/output character sets. Say Y here for ISO8859-6, the Arabic
	  character set.

config NLS_ISO8859_7
	tristate "NLS ISO 8859-7  (Modern Greek)"
	help
	  If you want to display filenames with native language characters
	  from the Microsoft FAT file system family or from JOLIET CD-ROMs
	  correctly on the screen, you need to include the appropriate
	  input/output character sets. Say Y here for ISO8859-7, the Modern
	  Greek character set.

config NLS_ISO8859_9
	tristate "NLS ISO 8859-9  (Latin 5; Turkish)"
	help
	  If you want to display filenames with native language characters
	  from the Microsoft FAT file system family or from JOLIET CD-ROMs
	  correctly on the screen, you need to include the appropriate
	  input/output character sets. Say Y here for the Latin 5 character
	  set, and it replaces the rarely needed Icelandic letters in Latin 1
	  with the Turkish ones. Useful in Turkey.

config NLS_ISO8859_13
	tristate "NLS ISO 8859-13 (Latin 7; Baltic)"
	help
	  If you want to display filenames with native language characters
	  from the Microsoft FAT file system family or from JOLIET CD-ROMs
	  correctly on the screen, you need to include the appropriate
	  input/output character sets. Say Y here for the Latin 7 character
	  set, which supports modern Baltic languages including Latvian
	  and Lithuanian.

config NLS_ISO8859_14
	tristate "NLS ISO 8859-14 (Latin 8; Celtic)"
	help
	  If you want to display filenames with native language characters
	  from the Microsoft FAT file system family or from JOLIET CD-ROMs
	  correctly on the screen, you need to include the appropriate
	  input/output character sets. Say Y here for the Latin 8 character
	  set, which adds the last accented vowels for Welsh (aka Cymraeg)
	  (and Manx Gaelic) that were missing in Latin 1.
	  <http://linux.speech.cymru.org/> has further information.

config NLS_ISO8859_15
	tristate "NLS ISO 8859-15 (Latin 9; Western European Languages with Euro)"
	---help---
	  If you want to display filenames with native language characters
	  from the Microsoft FAT file system family or from JOLIET CD-ROMs
	  correctly on the screen, you need to include the appropriate
	  input/output character sets. Say Y here for the Latin 9 character
	  set, which covers most West European languages such as Albanian,
	  Catalan, Danish, Dutch, English, Estonian, Faeroese, Finnish,
	  French, German, Galician, Irish, Icelandic, Italian, Norwegian,
	  Portuguese, Spanish, and Swedish. Latin 9 is an update to
	  Latin 1 (ISO 8859-1) that removes a handful of rarely used
	  characters and instead adds support for Estonian, corrects the
	  support for French and Finnish, and adds the new Euro character.
	  If unsure, say Y.

config NLS_KOI8_R
	tristate "NLS KOI8-R (Russian)"
	help
	  If you want to display filenames with native language characters
	  from the Microsoft FAT file system family or from JOLIET CD-ROMs
	  correctly on the screen, you need to include the appropriate
	  input/output character sets. Say Y here for the preferred Russian
	  character set.

config NLS_KOI8_U
	tristate "NLS KOI8-U/RU (Ukrainian, Belarusian)"
	help
	  If you want to display filenames with native language characters
	  from the Microsoft FAT file system family or from JOLIET CD-ROMs
	  correctly on the screen, you need to include the appropriate
	  input/output character sets. Say Y here for the preferred Ukrainian
	  (koi8-u) and Belarusian (koi8-ru) character sets.

config NLS_UTF8
	tristate "NLS UTF-8"
	help
	  If you want to display filenames with native language characters
	  from the Microsoft FAT file system family or from JOLIET CD-ROMs
	  correctly on the screen, you need to include the appropriate
	  input/output character sets. Say Y here for the UTF-8 encoding of
	  the Unicode/ISO9646 universal character set.

endif # NLS
