Hi,

I've written a bit of JavaScript that partly overcomes the 500
character limit. It's not 100% perfect as it only has some simple tag
detection functionality. I'm pretty new to JavaScript and I'm sure
that there are a lot of people out there that can improve on the code.
At least it's a start :o)

To use the code, simply stick it on your page and alter the
"translatecontents" function to suit your needs. You can also add code
to "beginTranslations" and "endTranslations" to enable/disable page
elements during the translation process.

Here you go:

=================================

<script type="text/javascript" src="http://www.google.com/jsapi";></
script>
<script type="text/javascript">google.load("language", "1");</script>
<script type="text/javascript">

var preTransValues = [];

function inTag(chunk)
{
        var openPos = chunk.lastIndexOf('<');
        var closePos = chunk.lastIndexOf('>');

        // Return true if an open tag appears before a close tag
        return openPos > closePos;
}

function beginTranslations()
{
   // Add code that should be executed when the translating starts
}

function endTranslations()
{
   // Add code that should be executed when the translating finished
}

function translateElement(tElement, translateText, fromLang, toLang,
minChunkSize, maxChunkSize, splitChars, lastElement)
{
        var translatedText = "";
        var chunkStart = 0;
        var chunkEnd = minChunkSize;
        var count = 0;
        var totalCount = 0;
        var splitChar;
        var tempChunk;

        // Stop when we reach the end of the text
        while (chunkStart <= translateText.length)
        {
                totalCount++;

                // Scan from the current position the to maximum chunk size to 
try
                // and find the best point to split the text. We do this to try 
to
split
                // between words and avoid splitting inside tags. Needs some 
work to
be
                // completely accurate. If we reach the end of the maximum chunk
size before
                // we've found a suitable position we have to split anyway and 
hope
for the
                // best.
            while ((chunkEnd <= translateText.length) &&
                   (chunkStart + chunkEnd <= maxChunkSize))
            {
                splitChar = translateText.substring(chunkEnd, chunkEnd + 1);

                // We've found a nice position if the current character matches
one of the
                // split characters and we are not inside a tag.
                if  (((!inTag(translateText.substring(chunkStart, chunkEnd +
2))) &&
                     (splitChars.indexOf(splitChar))))
                        break;
                else
                        chunkEnd++;
            }

            // If we split inside a tag try to find the start of the tag
            if (inTag(translateText.substring(chunkStart, chunkEnd + 1)))
            {
                tempChunk = translateText.substring(chunkStart, chunkEnd + 1)
                chunkEnd = tempChunk.lastIndexOf('<') + chunkStart;
            }

            // Extract the chunk of text to be translated
            chunk = translateText.substring(chunkStart, chunkEnd);

            // Translate the text
            google.language.translate(chunk, fromLang, toLang,
function(result)
                {
                                if (!result.error)
                                {
                                        // Add the translated text chunk to the 
completed translation
                                    translatedText = translatedText + 
result.translation;
                                    count ++;

                                    // We only want to set the translated text 
if this is it's
last translation chunk
                                    if (count >= totalCount)
                                    {
                                        tElement.innerHTML = translatedText;

                                        // If this is the last translation, 
call the end translations
function
                                        if (lastElement)
                                                endTranslations();
                                    }
                                }
                                else
                                {
                                        if (lastElement)
                                        endTranslations();

                                        return result.error.message;
                                }
                });

                chunkStart = chunkEnd;
                chunkEnd = chunkEnd + minChunkSize;
        }
}

function translateElements(elementIdArray, fromLang, toLang,
minChunkSize, maxChunkSize, splitChars)
{
        if (splitChars = "")
                 splitChars = "(),!.";

        if (toLang != "")
                beginTranslations();

        for (i = 0; i < elementIdArray.length; i++)
        {
                // Save the original text if this is the first time we are
translating it
                if (preTransValues[elementIdArray[i]] == undefined)
                        preTransValues[elementIdArray[i]] =
document.getElementById(elementIdArray[i]).innerHTML;

                if (toLang == "")
                        document.getElementById(elementIdArray[i]).innerHTML =
preTransValues[elementIdArray[i]];
                else
                        
translateElement(document.getElementById(elementIdArray[i]),
preTransValues[elementIdArray[i]], fromLang, toLang, minChunkSize,
maxChunkSize, splitChars, i == elementIdArray.length - 1);
        }
}

function translatecontents(fromLang, toLang)
{
        translateElements(["businessTypeString", "businessDiscountText",
"businessDescription"], // An array of the IDs of the elements you
want to translate
                                      fromLang, // The "from" language e.g. en 
<an empty string
will automatically detect the from language>
                                      toLang,   // The "to" language e.g. no
                                      300,      // The minimum length of a 
block that will be
translated
                                      500,      // The maximum length of a 
block that will be
translated (500 is the current Google max)
                                      "");      // The characters that will be 
used to split
words. Default = "(),!."
}
</script>

On Jul 30, 11:51 pm, Fitzchev <[EMAIL PROTECTED]> wrote:
> To expand the max chars vote 
> herehttp://code.google.com/p/google-ajax-apis/issues/detail?id=18
>
> On Jul 30, 11:07 pm, Denis1900 <[EMAIL PROTECTED]> wrote:
>
> > I'm connecting from C# by "GET" request to Google AJAX Language
> > Service. I use JavaScript encodeURIComponent for converting input
> > string, which is the value of q parameter.
> > But iflengthof my text is bigger than 400 symbols, i get error 400 -
> > Bad Request. What is themaximumlengthof the value of q paraneter? I
> > need totranslatelarge amount of text, so it very slow to make a new
> > query for each 400 symbols..

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google AJAX API" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/Google-AJAX-Search-API?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to