He estado buscando edades ahora para un código que puede traducir cualquier idioma a otro, pero ninguno de los códigos que encuentro funciona.
Sé que Google tiene una buena API de traducción, pero no puedo obtener el código Delphi de nadie para que funcione.
Siempre hay un error en el camino. Cualquier ayuda sería muy apreciada, necesito un programa que pueda traducir lo antes posible de mi proyecto final de escuela.Traduciendo idiomas En Delphi
Respuesta
Quizás no encontró los trabajos de Marco Cantu? Works with REST/AJAX/Delphi
Pero, como dice RRUZ, la API de Google Translate solo está disponible ahora como servicio de pago.
Gracias, este código parece muy prometedor, más que Google translate. El exe dado funciona al 100% en mi pc, pero cuando abro el código y trato de compilar obtengo un error, creo que me falta una unidad. Me dice que en "TIdUri.ParamsEncode (strIn)" ParamsEncode es un identificador no declarado. Y dice lo mismo sobre "PosEx" que aparece más tarde. –
Gracias, acabo de instalar Delphi 7 y este código funciona perfectamente. Es más fácil que la API de Google, de todos modos :) –
@MichaelMcQuirk, tenga cuidado porque el proyecto que figura en la página de marco cantu usa una versión anterior de la familia de API de Google Language que está en desuso. – RRUZ
La Google Translate API es una buena opción, pero ahora está disponible solo como un servicio de pago. En su lugar, puede probar la API de Microsoft Translator V2, consulte este artículo Using the Microsoft Translator V2 API from delphi
para obtener más información sobre cómo usar esta API de delphi.
ACTUALIZACIÓN Este es el mismo proyecto de demostración del artículo modificado para que sea compatible con su versión de Delphi.
program MicrosoftTranslatorApi;
{$APPTYPE CONSOLE}
uses
ShellApi,
ActiveX,
Classes,
ComObj,
Variants,
Windows,
WinInet,
SysUtils;
const
MicrosoftTranslatorTranslateUri = 'http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=%s&text=%s&from=%s&to=%s';
MicrosoftTranslatorDetectUri = 'http://api.microsofttranslator.com/v2/Http.svc/Detect?appId=%s&text=%s';
MicrosoftTranslatorGetLngUri = 'http://api.microsofttranslator.com/v2/Http.svc/GetLanguagesForTranslate?appId=%s';
MicrosoftTranslatorGetSpkUri = 'http://api.microsofttranslator.com/v2/Http.svc/GetLanguagesForSpeak?appId=%s';
MicrosoftTranslatorSpeakUri = 'http://api.microsofttranslator.com/v2/Http.svc/Speak?appId=%s&text=%s&language=%s';
//this AppId if for demo only please be nice and use your own , it's easy get one from here http://msdn.microsoft.com/en-us/library/ff512386.aspx
BingAppId = '73C8F474CA4D1202AD60747126813B731199ECEA';
Msxml2_DOMDocument = 'Msxml2.DOMDocument.6.0';
procedure WinInet_HttpGet(const Url: string;Stream:TStream);overload;
const
BuffSize = 1024*1024;
var
hInter : HINTERNET;
UrlHandle: HINTERNET;
BytesRead: DWORD;
Buffer : Pointer;
begin
hInter := InternetOpen('', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned(hInter) then
try
Stream.Seek(0,0);
GetMem(Buffer,BuffSize);
try
UrlHandle := InternetOpenUrl(hInter, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
if Assigned(UrlHandle) then
begin
repeat
InternetReadFile(UrlHandle, Buffer, BuffSize, BytesRead);
if BytesRead>0 then
Stream.WriteBuffer(Buffer^,BytesRead);
until BytesRead = 0;
InternetCloseHandle(UrlHandle);
end;
finally
FreeMem(Buffer);
end;
finally
InternetCloseHandle(hInter);
end;
end;
function WinInet_HttpGet(const Url: string): string;overload;
Var
StringStream : TStringStream;
begin
Result:='';
StringStream:=TStringStream.Create('');
try
WinInet_HttpGet(Url,StringStream);
if StringStream.Size>0 then
begin
StringStream.Seek(0,0);
Result:=StringStream.ReadString(StringStream.Size);
end;
finally
StringStream.Free;
end;
end;
function TranslateText(const AText,SourceLng,DestLng:string):string;
var
XmlDoc : OleVariant;
Node : OleVariant;
begin
Result:=WinInet_HttpGet(Format(MicrosoftTranslatorTranslateUri,[BingAppId,AText,SourceLng,DestLng]));
XmlDoc:= CreateOleObject(Msxml2_DOMDocument);
try
XmlDoc.Async := False;
XmlDoc.LoadXML(Result);
if (XmlDoc.parseError.errorCode <> 0) then
raise Exception.CreateFmt('Error in Xml Data %s',[XmlDoc.parseError]);
Node:= XmlDoc.documentElement;
if not VarIsClear(Node) then
Result:=XmlDoc.Text;
finally
XmlDoc:=Unassigned;
end;
end;
function DetectLanguage(const AText:string):string;
var
XmlDoc : OleVariant;
Node : OleVariant;
begin
Result:=WinInet_HttpGet(Format(MicrosoftTranslatorDetectUri,[BingAppId,AText]));
XmlDoc:= CreateOleObject(Msxml2_DOMDocument);
try
XmlDoc.Async := False;
XmlDoc.LoadXML(Result);
if (XmlDoc.parseError.errorCode <> 0) then
raise Exception.CreateFmt('Error in Xml Data %s',[XmlDoc.parseError]);
Node:= XmlDoc.documentElement;
if not VarIsClear(Node) then
Result:=XmlDoc.Text;
finally
XmlDoc:=Unassigned;
end;
end;
function GetLanguagesForTranslate: TStringList;
var
XmlDoc : OleVariant;
Node : OleVariant;
Nodes : OleVariant;
lNodes : Integer;
i : Integer;
sValue : string;
begin
Result:=TStringList.Create;
sValue:=WinInet_HttpGet(Format(MicrosoftTranslatorGetLngUri,[BingAppId]));
XmlDoc:= CreateOleObject(Msxml2_DOMDocument);
try
XmlDoc.Async := False;
XmlDoc.LoadXML(sValue);
if (XmlDoc.parseError.errorCode <> 0) then
raise Exception.CreateFmt('Error in Xml Data %s',[XmlDoc.parseError]);
Node:= XmlDoc.documentElement;
if not VarIsClear(Node) then
begin
Nodes := Node.childNodes;
if not VarIsClear(Nodes) then
begin
lNodes:= Nodes.Length;
for i:=0 to lNodes-1 do
Result.Add(Nodes.Item(i).Text);
end;
end;
finally
XmlDoc:=Unassigned;
end;
end;
function GetLanguagesForSpeak: TStringList;
var
XmlDoc : OleVariant;
Node : OleVariant;
Nodes : OleVariant;
lNodes : Integer;
i : Integer;
sValue : string;
begin
Result:=TStringList.Create;
sValue:=WinInet_HttpGet(Format(MicrosoftTranslatorGetSpkUri,[BingAppId]));
XmlDoc:= CreateOleObject(Msxml2_DOMDocument);
try
XmlDoc.Async := False;
XmlDoc.LoadXML(sValue);
if (XmlDoc.parseError.errorCode <> 0) then
raise Exception.CreateFmt('Error in Xml Data %s',[XmlDoc.parseError]);
Node:= XmlDoc.documentElement;
if not VarIsClear(Node) then
begin
Nodes := Node.childNodes;
if not VarIsClear(Nodes) then
begin
lNodes:= Nodes.Length;
for i:=0 to lNodes-1 do
Result.Add(Nodes.Item(i).Text);
end;
end;
finally
XmlDoc:=Unassigned;
end;
end;
procedure Speak(const FileName,AText,Lng:string);
var
Stream : TFileStream;
begin
Stream:=TFileStream.Create(FileName,fmCreate);
try
WinInet_HttpGet(Format(MicrosoftTranslatorSpeakUri,[BingAppId,AText,Lng]),Stream);
finally
Stream.Free;
end;
end;
var
lng : TStringList;
i : Integer;
FileName : string;
begin
try
CoInitialize(nil);
try
Writeln(TranslateText('Hello World','en','es'));
Writeln(DetectLanguage('Hello World'));
Writeln('Languages for translate supported');
lng:=GetLanguagesForTranslate;
try
for i:=0 to lng.Count-1 do
Writeln(lng[i]);
finally
lng.free;
end;
Writeln('Languages for speak supported');
lng:=GetLanguagesForSpeak;
try
for i:=0 to lng.Count-1 do
Writeln(lng[i]);
finally
lng.free;
end;
FileName:=ExtractFilePath(ParamStr(0))+'Demo.wav';
Speak(FileName,'This is a demo using the Microsoft Translator Api from delphi, enjoy','en');
ShellExecute(0, 'open', PChar(FileName),nil,nil, SW_SHOWNORMAL) ;
finally
CoUninitialize;
end;
except
on E:Exception do
Writeln(E.Classname, ':', E.Message);
end;
Writeln('Press Enter to exit');
Readln;
end.
+1 para su artículo – RBA
Bien, para todos aquellos que quieren un ejemplo de los errores que estoy recibiendo, aquí hay un caso en el que obtuve 2 errores. (Me refiero a http://theroadtodelphi.wordpress.com/2011/05/30/using-the-microsoft-translator-v2-from-delphi/) Mi primer error que consigo cuando intento este código es que el el archivo de clase "Generics.Collections" no existe. Tengo Google buscando en un sitio que te permite descargar el archivo .pas pero no puedo encontrar ninguno. El segundo error que recibo, supongo que lo entiendo debido al primer error, es que en la línea 64 (código completo en la parte inferior de la página) aparece un error que dice que hay muchos parámetros reales. –
(continuación) obviamente, el compilador no sabe qué es TEncoding.UTF8. Supongo que debe estar en el archivo "Generics.Collections" que falta. –
Antes que nada, no puede encontrar una herramienta 100% para traducir de un idioma a otro. Puede tener una herramienta que esté haciendo algo (más o menos) del trabajo para usted, pero necesita 'pulir' el resto. Como dijo RRUZ, puede usar el traductor de Microsoft, pero lo que dije también se aplica en este caso. Cualquier herramienta de este tipo le costará dinero. La traducción de Google es bastante buena, pero debe pagarla.
PD: No creo que en la escuela te pidan que crees una herramienta que está traduciendo de cualquier idioma a cualquier idioma. Tal vez una pequeña herramienta que puede probar que tienes el concepto. solo mis 2 centavos ...
Bueno, en realidad el proyecto que tengo es que necesito hacer un programa que pueda enseñarle a su usuario un nuevo idioma. Usar Google Translate's API es solo uno de los componentes pequeños (pero muy importantes) del programa. La mayor parte del proyecto está terminado, solo necesito una forma de traducir el texto. –
- 1. Traduciendo C a JavaScript
- 2. gettext no traduciendo
- 3. traduciendo un sitio web en php o mysql?
- 4. Traduciendo el diccionario de Python a C++
- 5. Traduciendo PHP date() para Sitio multilingüe
- 6. ¿Cómo detectar el idioma del sistema en Delphi para proyectos en varios idiomas?
- 7. Traduciendo comentarios y nombres de regiones en el código fuente
- 8. Traduciendo el cuerpo IMAP basado en su codificación
- 9. Traduciendo Java bytecode en otras representaciones y lenguajes de programación
- 10. MFMailComposeViewController en otros idiomas?
- 11. Mini-idiomas en Python
- 12. Calcula "Mediodía solar" usando efem, traduciendo a la hora local
- 13. Motores polimórficos, en idiomas administrados?
- 14. Sitio web en varios idiomas
- 15. define varios idiomas en html
- 16. portadas múltiples en varios idiomas
- 17. Aplicación expreso en varios idiomas
- 18. Idiomas síncronos vs asincrónicos
- 19. TTS Android Añadir idiomas
- 20. strtotime ¿Con diferentes idiomas?
- 21. ¿Soporta Android varios idiomas?
- 22. Django: sitio en ejecución en muchos idiomas
- 23. documento en varios idiomas en Latex
- 24. atoi() con otros idiomas
- 25. "Fundamentos de Delphi" en Delphi 2009
- 26. StyleCop para otros idiomas
- 27. Delphi e i18n
- 28. Programación Matemática Idiomas
- 29. Aprender varios idiomas
- 30. Idiomas independientes de plataforma
¿Podría mostrarnos lo que tiene hasta ahora y podemos ayudarle a resolver los problemas. No queremos hacer su proyecto escolar para usted. –
Creo que debería aclarar su pregunta. IMO, usted está buscando un código que realice una traducción llamando a un servicio web, DLL u otra API para hacer la traducción. "Código que puede traducir cualquier idioma a otro" probablemente requiera un doctorado en lingüística además de habilidades avanzadas de CS. –