#
# Native language support configuration
#

menu "Native Language Support"

config NLS
	tristate "Base 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.

config NLS_DEFAULT
	string "Default NLS Option"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	---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)"
	depends on NLS
	---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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	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)"
	depends on NLS
	---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)"
	depends on NLS
	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)"
	depends on NLS
	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"
	depends on NLS
	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.

endmenu

