﻿// -*- Coding: utf-8; -*-  [all uconv resource files]
// Copyright (c) 2000-2004 IBM, Inc. and Others.
//
// Root translation file for uconv messages.
// So you want to translate this file??? Great!
// 1. copy it to a new name [ex: se.txt]
//
// 2. You might wish to comment out ALL lines, and then uncomment them
//    as you add translations. That way, you don't inadvertently mark
//    an untranslated English (or whatever) string as already
//    translated. The base translation might change!
// 
// 3. These files are in UTF-8 format (even though root uses only
//    ASCII)
//
// 4. Make note of the location of {0}, {1}, etc.. they are taken from
//    arguments to u_wmsg() in order..
//
// 5. Add se.txt to RESSRC= in resfiles.mk and to the project file on 
//    the Windows side.
//
// 6. Send it in to srl@jtcsv.com or ask on the ICU mailing list! thanks!

root
{
  // uconv errors

  lcUsageWord { "usage" }
  ucUsageWord { "Usage" }
  usage {
    "{0}: {1} "
    "[ -h, -?, --help ] [ -V, --version ] [ -s, --silent ] [ -v, --verbose ] "
    "[ -l, --list | --list-code code | --default-code | -L, --list-transliterators ] "
    "[ --canon ] [ -x transliteration ] "
    "[ --to-callback callback | -c ] [ --from-callback callback | -i ] [ --callback callback ] "
    "[ --fallback | --no-fallback ] "
    "[ -b, --block-size size ] "
    "[ -f, --from-code code ] [ -t, --to-code code ] "
    "[ --add-signature ] [ --remove-signature ] "
    "[ -o, --output file ] "
    "[ file ... ]\n" }

  help {  "Options:  -h, --help                    print this message\n"
          "          -V, --version                 print the program version\n"
          "          -s, --silent                  suppress messages\n"
          "          -v, --verbose                 display progress information\n"
          "          -l, --list                    list all available encodings\n"
          "          --list-code code              list only the given encoding\n"
          "          --default-code                list only the default encoding\n"
          "          -L, --list-transliterators    list all available transliterators\n"
          "          --canon                       print list in cnvrtrs.txt(5) format\n"
          "          -x transliteration            run everything through transliteration\n" 
          "          --to-callback callback        use callback on destination encoding\n"
          "          -c                            omit invalid characters from the output\n"
          "          --from-callback callback      use callback on original encoding\n"
          "          -i                            ignore invalid sequences in the input\n"
          "          --callback callback           use callback on both encodings\n"
          "          -b, --block-size size         read size bytes blocks (default: 4096)\n"
          "          --fallback                    use fallback mapping\n"
          "          --no-fallback                 do not use fallback mapping\n"
          "          -f, --from-code code          set the original encoding\n"
          "          -t, --to-code code            set the destination encoding\n" 
          "          --add-signature               add a U+FEFF Unicode signature character (BOM)\n"
          "          --remove-signature            remove a U+FEFF Unicode signature character (BOM)\n"
          "          -o, --output file             write output to file\n"
          "\n"
          "Callbacks:"
  }

  cantGetNames   { "Couldn''t get available converter names.\n" } // 0: err
  cantGetTag   { "Couldn''t get standard tag name: {0}.\n" } // 0: err
  
  noSuchCodeset  { "Couldn''t find encoding: {0}.\n" } // 0: name of the encoding
  noFromCodeset  { "No original encoding set (use -f).\n" }
  noToCodeset    {  "No destination encoding set (use -t).\n" }

  badBlockSize  { "Bad block size: {0}.\n" } // 0: size of the block

  cantSetInBinMode { "Couldn't set standard input to binary mode." }
  cantSetOutBinMode { "Couldn't set standard output to binary mode." }

  cantOpenFromCodeset { "Couldn''t open converter for original encoding {0}: {1}.\n" } // 0:set, 1: err
  cantOpenToCodeset { "Couldn''t open converteur for destination encoding {0}: {1}.\n" } // 0: set, 1: err

  cantCreateTranslit { "Couldn''t create transliteration \"{0}\": {1}.\n" } // 0: set, 1: err
  cantCreateTranslitParseErr { "Couldn''t create transliteration \"{0}\": {1}, line {2}, offset {3}.\n" } // 0: set, 1: err, 2: line, 3: offset

  cantSetCallback { "Couldn''t set transcoding callback: {0}.\n" } // 0: err

  unknownCallback { "Unknown callback: {0}.\n" } // 0: callback name

  cantOpenInputF  { "Couldn''t open input file {0}: {1}.\n" } // 0: file, 1: strerror [OS error string]
  cantCreateOutputF  { "Couldn''t create output file {0}: {1}.\n" } // 0: file, 1: strerror [OS error string]

  cantWrite       { "The converted text couldn't be written: {0}.\n" } // 0: OS error string
  cantRead        { "Error reading from input file: {0}.\n" } // 0: OS error string

  problemCvtToU   { "Conversion to Unicode from codepage failed at input byte position {0}. Bytes: {1} Error: {2}\n" } // 0: position, 1: bytes, 2: err
  problemCvtFromU { "Conversion from Unicode to codepage failed at input byte position {0}. Unicode: {1} Error: {2}\n"} // 0: position, 1: Unicode, 2: err
  problemCvtFromUOut { "Conversion from Unicode to codepage failed at output byte position {0}. Unicode: {1} Error: {2}\n"} // 0: position, 1: Unicode, 2: err

// ICU errors - used by u_wmsg_errorName()

  U_USING_FALLBACK_ERROR       { "Using fallback data" }
  U_USING_DEFAULT_ERROR        { "Using default data" }
  U_ZERO_ERROR                 { "No error has occured" }
  U_ILLEGAL_ARGUMENT_ERROR     { "Illegal argument" }
  U_MISSING_RESOURCE_ERROR     { "A resource was missing" }
  U_INVALID_FORMAT_ERROR       { "Invalid format" }
  U_FILE_ACCESS_ERROR          { "Problem accessing that file/object" }
  U_INTERNAL_PROGRAM_ERROR     { "Internal program error" }
  U_MESSAGE_PARSE_ERROR        { "Parse error on message format" }
  U_MEMORY_ALLOCATION_ERROR    { "Out of memory" }
  U_INDEX_OUTOFBOUNDS_ERROR    { "An index was out-of-bounds" }
  U_PARSE_ERROR                { "Parse error" }
  U_INVALID_CHAR_FOUND         { "Invalid character found" }
  U_TRUNCATED_CHAR_FOUND       { "Truncated character found" }
  U_ILLEGAL_CHAR_FOUND         { "Illegal character found" }
  U_INVALID_TABLE_FORMAT       { "Invalid table data format" }
  U_INVALID_TABLE_FILE         { "Invalid table data file" }
  U_BUFFER_OVERFLOW_ERROR      { "Buffer overflow" }
  U_UNSUPPORTED_ERROR          { "A feature was unsupported" }
  U_RESOURCE_TYPE_MISMATCH     { "Resource type mismatch" }
  U_ILLEGAL_ESCAPE_SEQUENCE    { "Illegal escape sequence found" }
  U_UNSUPPORTED_ESCAPE_SEQUENCE {"Unsupported escape sequence found" }
}

