翻译输入值问题 [英] Translating input value issue

查看:77
本文介绍了翻译输入值问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用Jquery在西班牙语中创建了数字到单词的输入翻译

I created an input translation of numbers to words in Spanish using Jquery

$(function() {
    $('input[name=Number]').on('keyup change blur',function() {
        Calculate( this.form );
    });
    Calculate( $('form')[0] );
});


function FixSpaces(s){
//returns a string with no double spaces inside
    var t='';
    for(var i=0; i<s.length; i++){
        if (i>0){
            if (!((s.substring(i-1,i)==' ')&(s.substring(i,i+1)==' ')))
                t=t+s.substring(i,i+1);
        }else
            t=t+s.substring(i,i+1);
    }
    return t;
}

function Calculate(form)  {
//fill forms with text
    var Ner = form.Number.value; 
    form.Spanish.value = NumerosPalabras(Ner);

}

function REPLICATE(n, c){
//returns n times char c
    var t='';
    for(var i=1; i<=n; i++)
        t=t+c;
    return t;
}

function NumerosPalabras(s)  {
//Spanish words for numbers
    s = s.replace(',','');
    var a,b,c,j,orlen,result=' ',
        cents = s.split('.')[1] || '00',
        s = s.split('.')[0] || s;
    if (s=='0') {return ('CERO');}
        orlen=s.length;
    if ((s.length % 3)>0)
        s=' '+s;
    if ((s.length % 3)>0)
        s=' '+s;
    for (var i = 0; i < s.length; i=i+3) {
        j=s.length-i-1;
        a=s.substring(j, j+1);
        b=s.substring(j-1, j);
        c=s.substring(j-2, j-1);
        if (a!=' '){
            if ((i==3)&(c+b+a!=',000') ) {result='MIL '+result;}
            else if (((i==6)&(c+b+a!=',000') ) &(orlen==7)&(a=='1')) {result='MILLÓN '+result;}
            else if ((i==6)&(c+b+a!=',000') ) {result='MILLONES '+result;}
            else if ((i==9)&(c+b+a!=',000') ) {result='MIL MILLONES '+result;}
        }
        if ((b!=1) | (b==' ')){
            if (a==1){result='UN '+result;}
            else if (a==2){result='DOS '+result;}
            else if (a==3){result='TRES '+result;}
            else if (a==4){result='CUATRO '+result;}
            else if (a==5){result='CINCO '+result;}
            else if (a==6){result='SEIS '+result;}
            else if (a==7){result='SIETE '+result;}
            else if (a==8){result='OCHO '+result;}
            else if (a==9){result='NUEVE '+result;}
        }
        if ((b!=' ')&(b!=',0')){
            if ((b==1) | (b==2)){
                if (b+a==10){result='DIEZ '+result;}
                else if (b+a==11){result='ONCE '+result;}
                else if (b+a==12){result='DOCE '+result;}
                else if (b+a==13){result='TRECE '+result;}
                else if (b+a==14){result='CATORCE '+result;}
                else if (b+a==15){result='QUINCE '+result;}
                else if (b+a==16){result='DIECISÉIS '+result;}
                else if (b+a==17){result='DIECISIETE '+result;}
                else if (b+a==18){result='DIECIOCHO '+result;}
                else if (b+a==19){result='DIECINUEVE '+result;}
                else if (b+a==20){result='VEINTE '+result;}
                else if (b+a==21){result='VEINTI'+result;}
                else if (b+a==22){result='VEINTI'+result;}
                else if (b+a==23){result='VEINTI'+result;}
                else if (b+a==24){result='VEINTI'+result;}
                else if (b+a==25){result='VEINTI'+result;}
                else if (b+a==26){result='VEINTI'+result;}
                else if (b+a==27){result='VEINTI'+result;}
                else if (b+a==28){result='VEINTI'+result;}
                else if (b+a==29){result='VEINTI'+result;}
            }
            else{
                var temp=''
                if (a!=0){temp='Y ';}
                if (b==3){result='TREINTA '+temp+result;}
                else if (b==4){result='CUARENTA '+temp+result;}
                else if (b==5){result='CINCUENTA '+temp+result;}
                else if (b==6){result='SESENTA '+temp+result;}
                else if (b==7){result='SETENTA '+temp+result;}
                else if (b==8){result='OCHENTA '+temp+result;}
                else if (b==9){result='NOVENTA '+temp+result;}

                }
        }
        if ((c!=' ')&(c!=',0')){
            if ((a==',0') & (b==',0')){
                if (c==1){result='CIEN '+result;}
                else if (c==2){result='DOSCIENTOS '+result;}
                else if (c==3){result='TRESCIENTOS '+result;}
                else if (c==4){result='CUATROCIENTOS '+result;}
                else if (c==5){result='QUINIENTOS '+result;}
                else if (c==6){result='SEISCIENTOS '+result;}
                else if (c==7){result='SETECIENTOS '+result;}
                else if (c==8){result='OCHOCIENTOS '+result;}
                else if (c==9){result='NOVECIENTOS '+result;}
            }
            else{
                if (c==1){result='CIENTO '+result;}
                else if (c==2){result='DOSCIENTOS '+result;}
                else if (c==3){result='TRESCIENTOS '+result;}
                else if (c==4){result='CUATROCIENTOS '+result;}
                else if (c==5){result='QUINIENTOS '+result;}
                else if (c==6){result='SEISCIENTOS '+result;}
                else if (c==7){result='SETECIENTOS '+result;}
                else if (c==8){result='OCHOCIENTOS '+result;}
                else if (c==9){result='NOVECIENTOS '+result;}
            }
        }
    }
    result=FixSpaces(result);
    result=Trim(result);
    if (result.substring(0, 7)=='MIL ') result=result.substring(3,result.length);
    if (result.substring(result.length-3, result.length)==' UN') result=result+'o';
    if (result=='UN ') result='uno';
    if (result.substring(result.length-2, result.length)=='Y ') 
        result=result.substring(0,result.length-2);

if (InStr(result, 'MILLONES')!=RInStr(result, 'MILLONES'))
    {var z=InStr(result, 'MILLONES')
    result=result.substring(0,z-1)+result.substring(z+7,result.length);}
    result=FixSpaces(result);
    return (result+" CON "+ cents +"/100 NUEVOS SOLES");
}

function InStr(n, s1, s2){
    var numargs=InStr.arguments.length;

    if(numargs<3)
        return n.indexOf(s1)+1;
    else
        return s1.indexOf(s2, n)+1;
}

function RInStr(n, s1, s2){
    var numargs=RInStr.arguments.length;

    if(numargs<3)
        return n.lastIndexOf(s1)+1;
    else
        return s1.lastIndexOf(s2, n)+1;
}

function LTrim(s){
    // Devuelve una cadena sin los espacios del principio
    var i=0;
    var j=0;

    // Busca el primer caracter <> de un espacio
    for(i=0; i<=s.length-1; i++)
        if(s.substring(i,i+1) != ' '){
            j=i;
            break;
        }
    return s.substring(j, s.length);
}

function RTrim(s){
    // Quita los espacios en blanco del final de la cadena
    var j=0;

    // Busca el último caracter <> de un espacio
    for(var i=s.length-1; i>-1; i--)
        if(s.substring(i,i+1) != ' '){
            j=i;
            break;
        }
    return s.substring(0, j+1);
}

function Trim(s){
    // Quita los espacios del principio y del final
    return LTrim(RTrim(s));
} 

这是演示工作的范围是1.00至999.00和2,000.00至999,999.00

Here is the demo working by range from 1.00 to 999.00 and 2,000.00 to 999,999.00

<form>
 Number to word
 <INPUT NAME="Number" TYPE="text" SIZE="60" value="2,658.12"> 
 <TEXTAREA NAME="Spanish" ROWS="5" COLS="90"></TEXTAREA><BR>
</form>

但是当值在1,000.00到1,999.00之间时

But when the value is in range 1,000.00 to 1,999.00

例如,如果value ="1,601.12".

For example if value = "1,601.12" .

  • 我明白了:UN MIL SEISCIENTOS UNO CON 12/100 NUEVOS鞋底

  • I get this: UN MIL SEISCIENTOS UNO CON 12/100 NUEVOS SOLES

我应该有:MIL SEISCIENTOS UNO CON 12/100 NUEVOS鞋底

I should have: MIL SEISCIENTOS UNO CON 12/100 NUEVOS SOLES

我尝试了这个示例可以正常工作,但是范围是1.00到999.00以及2,000.00到999,999.00却无法正常工作正确.

I tried this example is working but ranges from 1.00 to 999.00 and 2,000.00 to 999,999.00 and not working correctly.

我只想将"UN MIL"修复为"MIL",而无需更改其余单词.

I just want to fix "UN MIL" to "MIL" without altering the rest of words.

推荐答案

DEMO

在第60行,您要更改:

At line 60, you want to change:

if (a==1){result='UN '+result;}

收件人:

if ((a==1) && (i==0)){result='UN '+result;}

这篇关于翻译输入值问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆