Changeset 15 in code for trunk/engines/iciba.go


Ignore:
Timestamp:
Aug 30, 2023, 11:57:46 AM (22 months ago)
Author:
manerakai
Message:

Added gofiber

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/engines/iciba.go

    r12 r15  
    1717func (_ *ICIBA) DisplayName() string { return "iCIBA" }
    1818
    19 var icibaLanguages = []Language{
     19var icibaLanguages = Language{
    2020        // ICIBA does have an API, but they return Chinese names.
    2121        // For languages already present in Google translate, the English
     
    2626        // due to conflict between ISO-639 table and Chinese label
    2727        // one "//" means on iciba but not on google
    28         {Name: "Achinese", Code: "ace"},       //
    29         {Name: "Achuar-Shiwiar", Code: "acu"}, //
    30         {Name: "Afrikaans", Code: "af"},
    31         {Name: "Aguaruna", Code: "agr"}, //
    32         {Name: "Akawaio", Code: "ake"},  //
    33         {Name: "Albanian", Code: "sq"},
    34         {Name: "Amharic", Code: "am"},
    35         {Name: "Arabic", Code: "ar"},
    36         {Name: "Armenian", Code: "hy"},
    37         {Name: "Azerbaijani", Code: "az"},
    38         {Name: "Barasana-Eduria", Code: "bsn"}, //
    39         {Name: "Bashkir", Code: "ba"},          //
    40         {Name: "Basque", Code: "eu"},
    41         {Name: "Belarusian", Code: "be"},
    42         {Name: "Bemba", Code: "bem"}, //
    43         {Name: "Bengali", Code: "bn"},
    44         {Name: "Berber", Code: "ber"}, //
    45         {Name: "Bislama", Code: "bi"}, //
    46         {Name: "Bosnian", Code: "bs"},
    47         {Name: "Breton", Code: "br"}, //
    48         {Name: "Bulgarian", Code: "bg"},
    49         {Name: "Cabécar", Code: "cjp"}, //
    50         {Name: "Cantonese", Code: "yue"},
    51         {Name: "Catalan", Code: "ca"},
    52         {Name: "Cebuano", Code: "ceb"},
    53         {Name: "Chamorro", Code: "cha"}, //
    54         {Name: "Cherokee", Code: "chr"}, //
    55         {Name: "Chichewa", Code: "ny"},
    56         {Name: "Chinese (Simplified)", Code: "zh"},   // "zh-cn" on Google
    57         {Name: "Chinese (Traditional)", Code: "cht"}, // "zh-tw" on Google
    58         {Name: "Chuvash", Code: "cv"},
    59         {Name: "Coptic", Code: "cop"}, //
    60         {Name: "Corsican", Code: "co"},
    61         {Name: "Croatian", Code: "hr"},
    62         {Name: "Czech", Code: "cs"},
    63         {Name: "Danish", Code: "da"},
    64         {Name: "Dhivehi", Code: "dv"}, //
    65         {Name: "Dinka", Code: "dik"},  //
    66         {Name: "Dutch", Code: "nl"},
    67         {Name: "Dzongkha", Code: "dz"}, //
    68         {Name: "English", Code: "en"},
    69         {Name: "Esperanto", Code: "eo"},
    70         {Name: "Estonian", Code: "et"},
    71         {Name: "Ewe", Code: "ee"},       //
    72         {Name: "Faroese", Code: "fo"},   //
    73         {Name: "Fijian", Code: "fj"},    //
    74         {Name: "Filipino", Code: "fil"}, // "tl" on Google
    75         {Name: "Finnish", Code: "fi"},
    76         {Name: "French", Code: "fr"},
    77         {Name: "Frisian", Code: "fy"},
    78         {Name: "Galela", Code: "gbi"}, //
    79         {Name: "Galician", Code: "gl"},
    80         {Name: "Ganda", Code: "lg"},    //
    81         {Name: "Georgian", Code: "jy"}, // "ka" on Google
    82         {Name: "German", Code: "de"},
    83         {Name: "Greek", Code: "el"},
    84         {Name: "Guerrero Amuzgo", Code: "amu"}, //
    85         {Name: "Gujarati", Code: "gu"},
    86         {Name: "Haitian Creole", Code: "ht"},
    87         {Name: "Hausa", Code: "ha"},
    88         {Name: "Hawaiian", Code: "haw"},
    89         {Name: "Hebrew", Code: "he"}, // "iw" on Google
    90         {Name: "Hindi", Code: "hi"},
    91         {Name: "Hmong Daw", Code: "mww"}, //
    92         {Name: "Hmong", Code: "hmn"},     // not in iciba
    93         {Name: "Hungarian", Code: "hu"},
    94         {Name: "Icelandic", Code: "is"},
    95         {Name: "Igbo", Code: "ig"},
    96         {Name: "Indonesian", Code: "id"},
    97         {Name: "Irish", Code: "ga"},
    98         {Name: "Italian", Code: "it"},
    99         {Name: "Jacalteco", Code: "jac"}, //
    100         {Name: "Japanese", Code: "ja"},
    101         {Name: "Javanese", Code: "jv"}, // "jw" on Google
    102         {Name: "Kabyle", Code: "kab"},  //
    103         {Name: "Kannada", Code: "kn"},
    104         {Name: "Kaqchikel", Code: "cak"},        //
    105         {Name: "Kazakh", Code: "ka"},            // Google only has "kk"
    106         {Name: "Kazakh (Cyrillic)", Code: "kk"}, // Google has it as just "Kazakh"
    107         {Name: "Kekchí", Code: "kek"},           //
    108         {Name: "Khmer", Code: "km"},
    109         {Name: "Kinyarwanda", Code: "rw"},
    110         {Name: "Kongo", Code: "kg"}, //
    111         {Name: "Korean", Code: "ko"},
    112         {Name: "Kurdish (Kurmanji)", Code: "ku"},
    113         {Name: "Kyrgyz", Code: "ky"},
    114         {Name: "Lao", Code: "lo"},
    115         {Name: "Latin", Code: "la"},
    116         {Name: "Latvian", Code: "lv"},
    117         {Name: "Lingala", Code: "ln"}, //
    118         {Name: "Lithuanian", Code: "lt"},
    119         {Name: "Lukpa", Code: "dop"}, //
    120         {Name: "Luxembourgish", Code: "lb"},
    121         {Name: "Macedonian", Code: "mk"},
    122         {Name: "Malagasy", Code: "mg"},
    123         {Name: "Malay", Code: "ms"},
    124         {Name: "Malayalam", Code: "ml"},
    125         {Name: "Maltese", Code: "mt"},
    126         {Name: "Mam", Code: "mam"}, //
    127         {Name: "Manx", Code: "gv"}, //
    128         {Name: "Maori", Code: "mi"},
    129         {Name: "Marathi", Code: "mr"},
    130         {Name: "Mari (Eastern)", Code: "mhr"}, //
    131         {Name: "Mari (Western)", Code: "mrj"}, //
    132         {Name: "Mongolian", Code: "mn"},
    133         {Name: "Montenegrin", Code: "me"}, //
    134         {Name: "Myanmar (Burmese)", Code: "my"},
    135         {Name: "Nahuatl", Code: "nhg"}, //
    136         {Name: "Ndyuka", Code: "djk"},  //
    137         {Name: "Nepali", Code: "ne"},
    138         {Name: "Norwegian", Code: "no"},
    139         {Name: "Odia (Oriya)", Code: "or"},
    140         {Name: "Ojibwa", Code: "ojb"},
    141         {Name: "Oromo", Code: "om"},       //
    142         {Name: "Ossetian", Code: "os"},    //
    143         {Name: "Paite", Code: "pck"},      //
    144         {Name: "Papiamento", Code: "pap"}, //
    145         {Name: "Pashto", Code: "ps"},
    146         {Name: "Persian", Code: "fa"},
    147         {Name: "Polish", Code: "pl"},
    148         {Name: "Portuguese", Code: "pt"},
    149         {Name: "Potawatomi", Code: "pot"}, //
    150         {Name: "Punjabi", Code: "pa"},
    151         {Name: "Querétaro Otomi", Code: "otq"},     //
    152         {Name: "Quiché", Code: "quc"},              //
    153         {Name: "Quichua", Code: "quw"},             //
    154         {Name: "Quiotepec Chinantec", Code: "chq"}, //
    155         {Name: "Romani", Code: "rmn"},              //
    156         {Name: "Romanian", Code: "ro"},
    157         {Name: "Rundi", Code: "rn"}, //
    158         {Name: "Russian", Code: "ru"},
    159         {Name: "Samoan", Code: "sm"},
    160         {Name: "Sango", Code: "sg"}, //
    161         {Name: "Scots Gaelic", Code: "gd"},
    162         {Name: "Serbian", Code: "sr"},
    163         {Name: "Seselwa Creole French", Code: "crs"}, //
    164         {Name: "Sesotho", Code: "st"},
    165         {Name: "Shona", Code: "sn"},
    166         {Name: "Shuar", Code: "jiv"}, //
    167         {Name: "Sindhi", Code: "sd"},
    168         {Name: "Sinhala", Code: "si"},
    169         {Name: "Slovak", Code: "sk"},
    170         {Name: "Slovenian", Code: "sl"},
    171         {Name: "Somali", Code: "so"},
    172         {Name: "Spanish", Code: "es"},
    173         {Name: "Sundanese", Code: "su"},
    174         {Name: "Swahili", Code: "sw"},
    175         {Name: "Swedish", Code: "sv"},
    176         {Name: "Syriac", Code: "syc"},    // considered "extinct" but is somehow supported
    177         {Name: "Tachelhit", Code: "shi"}, //
    178         {Name: "Tahitian", Code: "ty"},   //
    179         {Name: "Tajik", Code: "tg"},
    180         {Name: "Tamil", Code: "ta"},
    181         {Name: "Tatar", Code: "tt"},
    182         {Name: "Telugu", Code: "te"},
    183         {Name: "Tetum", Code: "tet"}, //
    184         {Name: "Thai", Code: "th"},
    185         {Name: "Tigre", Code: "ti"},      //
    186         {Name: "Tiwi", Code: "tw"},       //
    187         {Name: "Tok Pisin", Code: "tpi"}, //
    188         {Name: "Tonga", Code: "to"},      //
    189         {Name: "Tsonga", Code: "ts"},
    190         {Name: "Tswana", Code: "tn"}, //
    191         {Name: "Turkish", Code: "tr"},
    192         {Name: "Turkmen", Code: "tk"},
    193         {Name: "Udmurt", Code: "udm"}, //
    194         {Name: "Ukrainian", Code: "uk"},
    195         {Name: "Uma", Code: "ppk"}, //
    196         {Name: "Urdu", Code: "ur"},
    197         {Name: "Uspanteco", Code: "usp"}, //
    198         {Name: "Uyghur", Code: "uy"},     // "ug" on Google
    199         {Name: "Uzbek", Code: "uz"},
    200         {Name: "Venda", Code: "ve"}, //
    201         {Name: "Vietnamese", Code: "vi"},
    202         {Name: "Waray", Code: "war"}, //
    203         {Name: "Welsh", Code: "cy"},
    204         {Name: "Wolaitta", Code: "wal"}, //
    205         {Name: "Wolof", Code: "wol"},
    206         {Name: "Xhosa", Code: "xh"},
    207         {Name: "Yiddish", Code: "yi"},
    208         {Name: "Yoruba", Code: "yo"},
    209         {Name: "Yucatán Maya", Code: "yua"}, //
    210         {Name: "Zarma", Code: "dje"},        //
    211         {Name: "Zulu", Code: "zu"},
     28        "ace": "Achinese",       //
     29        "acu": "Achuar-Shiwiar", //
     30        "af":  "Afrikaans",
     31        "agr": "Aguaruna", //
     32        "ake": "Akawaio",  //
     33        "sq":  "Albanian",
     34        "am":  "Amharic",
     35        "ar":  "Arabic",
     36        "hy":  "Armenian",
     37        "az":  "Azerbaijani",
     38        "bsn": "Barasana-Eduria", //
     39        "ba":  "Bashkir",         //
     40        "eu":  "Basque",
     41        "be":  "Belarusian",
     42        "bem": "Bemba", //
     43        "bn":  "Bengali",
     44        "ber": "Berber", //
     45        "bi":  "Bislama", //
     46        "bs":  "Bosnian",
     47        "br":  "Breton", //
     48        "bg":  "Bulgarian",
     49        "cjp": "Cabécar", //
     50        "yue": "Cantonese",
     51        "ca":  "Catalan",
     52        "ceb": "Cebuano",
     53        "cha": "Chamorro", //
     54        "chr": "Cherokee", //
     55        "ny":  "Chichewa",
     56        "zh":  "Chinese (Simplified)",  // "zh-cn" on Google
     57        "cht": "Chinese (Traditional)", // "zh-tw" on Google
     58        "cv":  "Chuvash",
     59        "cop": "Coptic", //
     60        "co":  "Corsican",
     61        "hr":  "Croatian",
     62        "cs":  "Czech",
     63        "da":  "Danish",
     64        "dv":  "Dhivehi", //
     65        "dik": "Dinka",   //
     66        "nl":  "Dutch",
     67        "dz":  "Dzongkha", //
     68        "en":  "English",
     69        "eo":  "Esperanto",
     70        "et":  "Estonian",
     71        "ee":  "Ewe",      //
     72        "fo":  "Faroese",  //
     73        "fj":  "Fijian",   //
     74        "fil": "Filipino", // "tl" on Google
     75        "fi":  "Finnish",
     76        "fr":  "French",
     77        "fy":  "Frisian",
     78        "gbi": "Galela", //
     79        "gl":  "Galician",
     80        "lg":  "Ganda",    //
     81        "jy":  "Georgian", // "ka" on Google
     82        "de":  "German",
     83        "el":  "Greek",
     84        "amu": "Guerrero Amuzgo", //
     85        "gu":  "Gujarati",
     86        "ht":  "Haitian Creole",
     87        "ha":  "Hausa",
     88        "haw": "Hawaiian",
     89        "he":  "Hebrew", // "iw" on Google
     90        "hi":  "Hindi",
     91        "mww": "Hmong Daw", //
     92        "hmn": "Hmong",     // not in iciba
     93        "hu":  "Hungarian",
     94        "is":  "Icelandic",
     95        "ig":  "Igbo",
     96        "id":  "Indonesian",
     97        "ga":  "Irish",
     98        "it":  "Italian",
     99        "jac": "Jacalteco", //
     100        "ja":  "Japanese",
     101        "jv":  "Javanese", // "jw" on Google
     102        "kab": "Kabyle",   //
     103        "kn":  "Kannada",
     104        "cak": "Kaqchikel",         //
     105        "ka":  "Kazakh",            // Google only has "kk"
     106        "kk":  "Kazakh (Cyrillic)", // Google has it as just "Kazakh"
     107        "kek": "Kekchí",            //
     108        "km":  "Khmer",
     109        "rw":  "Kinyarwanda",
     110        "kg":  "Kongo", //
     111        "ko":  "Korean",
     112        "ku":  "Kurdish (Kurmanji)",
     113        "ky":  "Kyrgyz",
     114        "lo":  "Lao",
     115        "la":  "Latin",
     116        "lv":  "Latvian",
     117        "ln":  "Lingala", //
     118        "lt":  "Lithuanian",
     119        "dop": "Lukpa", //
     120        "lb":  "Luxembourgish",
     121        "mk":  "Macedonian",
     122        "mg":  "Malagasy",
     123        "ms":  "Malay",
     124        "ml":  "Malayalam",
     125        "mt":  "Maltese",
     126        "mam": "Mam", //
     127        "gv":  "Manx", //
     128        "mi":  "Maori",
     129        "mr":  "Marathi",
     130        "mhr": "Mari (Eastern)", //
     131        "mrj": "Mari (Western)", //
     132        "mn":  "Mongolian",
     133        "me":  "Montenegrin", //
     134        "my":  "Myanmar (Burmese)",
     135        "nhg": "Nahuatl", //
     136        "djk": "Ndyuka",  //
     137        "ne":  "Nepali",
     138        "no":  "Norwegian",
     139        "or":  "Odia (Oriya)",
     140        "ojb": "Ojibwa",
     141        "om":  "Oromo",      //
     142        "os":  "Ossetian",   //
     143        "pck": "Paite",      //
     144        "pap": "Papiamento", //
     145        "ps":  "Pashto",
     146        "fa":  "Persian",
     147        "pl":  "Polish",
     148        "pt":  "Portuguese",
     149        "pot": "Potawatomi", //
     150        "pa":  "Punjabi",
     151        "otq": "Querétaro Otomi",     //
     152        "quc": "Quiché",              //
     153        "quw": "Quichua",             //
     154        "chq": "Quiotepec Chinantec", //
     155        "rmn": "Romani",              //
     156        "ro":  "Romanian",
     157        "rn":  "Rundi", //
     158        "ru":  "Russian",
     159        "sm":  "Samoan",
     160        "sg":  "Sango", //
     161        "gd":  "Scots Gaelic",
     162        "sr":  "Serbian",
     163        "crs": "Seselwa Creole French", //
     164        "st":  "Sesotho",
     165        "sn":  "Shona",
     166        "jiv": "Shuar", //
     167        "sd":  "Sindhi",
     168        "si":  "Sinhala",
     169        "sk":  "Slovak",
     170        "sl":  "Slovenian",
     171        "so":  "Somali",
     172        "es":  "Spanish",
     173        "su":  "Sundanese",
     174        "sw":  "Swahili",
     175        "sv":  "Swedish",
     176        "syc": "Syriac",    // considered "extinct" but is somehow supported
     177        "shi": "Tachelhit", //
     178        "ty":  "Tahitian",  //
     179        "tg":  "Tajik",
     180        "ta":  "Tamil",
     181        "tt":  "Tatar",
     182        "te":  "Telugu",
     183        "tet": "Tetum", //
     184        "th":  "Thai",
     185        "ti":  "Tigre",     //
     186        "tw":  "Tiwi",      //
     187        "tpi": "Tok Pisin", //
     188        "to":  "Tonga",     //
     189        "ts":  "Tsonga",
     190        "tn":  "Tswana", //
     191        "tr":  "Turkish",
     192        "tk":  "Turkmen",
     193        "udm": "Udmurt", //
     194        "uk":  "Ukrainian",
     195        "ppk": "Uma", //
     196        "ur":  "Urdu",
     197        "usp": "Uspanteco", //
     198        "uy":  "Uyghur",    // "ug" on Google
     199        "uz":  "Uzbek",
     200        "ve":  "Venda", //
     201        "vi":  "Vietnamese",
     202        "war": "Waray", //
     203        "cy":  "Welsh",
     204        "wal": "Wolaitta", //
     205        "wol": "Wolof",
     206        "xh":  "Xhosa",
     207        "yi":  "Yiddish",
     208        "yo":  "Yoruba",
     209        "yua": "Yucatán Maya", //
     210        "dje": "Zarma",        //
     211        "zu":  "Zulu",
    212212}
    213213
    214 func (_ *ICIBA) SourceLanguages() ([]Language, error) { return icibaLanguages, nil }
    215 
    216 func (_ *ICIBA) TargetLanguages() ([]Language, error) { return icibaLanguages, nil }
    217 
    218 func (_ *ICIBA) SupportsAutodetect() bool { return true }
    219 
    220 func (_ *ICIBA) DetectLanguage(text string) (Language, error) { return Language{}, nil }
     214func (_ *ICIBA) SourceLanguages() (Language, error) { return icibaLanguages, nil }
     215
     216func (_ *ICIBA) TargetLanguages() (Language, error) { return icibaLanguages, nil }
     217
     218func (_ *ICIBA) DetectLanguage(text string) (string, error) { return "", nil }
    221219
    222220type icibaTranslateResponse struct {
     
    227225}
    228226
    229 func (_ *ICIBA) Translate(text string, from, to Language) (TranslationResult, error) {
     227func (_ *ICIBA) Translate(text string, from, to string) (TranslationResult, error) {
    230228        requestURL, err := url.Parse("https://ifanyi.iciba.com/index.php")
    231229
     
    248246
    249247        formData := url.Values{}
    250         formData.Add("from", from.Code)
    251         formData.Add("to", to.Code)
     248        formData.Add("from", from)
     249        formData.Add("to", to)
    252250        formData.Add("q", text)
    253251
     
    270268        }
    271269
    272         var sourceLanguage Language
    273 
    274         for _, lang := range icibaLanguages {
    275                 if lang.Code == responseJSON.Content.From {
    276                         sourceLanguage = lang
     270        var sourceLanguage string
     271
     272        for code := range icibaLanguages {
     273                if code == responseJSON.Content.From {
     274                        sourceLanguage = code
    277275                        break
    278276                }
    279277        }
    280278
    281         if sourceLanguage == (Language{}) {
    282                 return TranslationResult{SourceLanguage: from, TranslatedText: responseJSON.Content.Out},
     279        if sourceLanguage == "" {
     280                return TranslationResult{TranslatedText: responseJSON.Content.Out},
    283281                        fmt.Errorf("language code \"%s\" is not in iCIBA's language list", responseJSON.Content.From)
    284282        }
Note: See TracChangeset for help on using the changeset viewer.