【问题标题】:Google Translate API on iPhoneiPhone 上的谷歌翻译 API
【发布时间】:2014-07-18 13:54:25
【问题描述】:

我正在编写一个简单的代码,我在其中使用 Google API 进行翻译服务,但出现以下错误:

Connection failed: Error Domain=NSURLErrorDomain Code=-1000 "bad URL" UserInfo=0x176c80a0 {NSUnderlyingError=0x175c8d00 "bad URL", NSLocalizedDescription=bad URL}

这是我写的代码:

  #import "ViewController.h"
  #import"SBJson.h"

  @interface ViewController ()
  @property (strong, nonatomic) IBOutlet UITextField *textfield;
  @property (strong, nonatomic) IBOutlet UIButton *go;
  @property (strong, nonatomic) IBOutlet UITextView *textview;
- (IBAction)translate:(id)sender;

  @property (strong, nonatomic) NSMutableArray *translations;
  @property (strong, nonatomic)NSString *_lastText;
  @property (nonatomic, copy) NSString * lastText;
  @end

 @implementation ViewController
 @synthesize lastText = _lastText;

- (void)viewDidLoad
 {
 [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//Initializing the translation array
 _translations = [[NSMutableArray alloc] init];
 }

 - (void)didReceiveMemoryWarning
 {
  [super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
 }

- (void)performTranslation {

responseData = [[NSMutableData data] init ];

NSString *langString = @"en|ja";
NSString *textEscaped = [_lastText 
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];    

NSString *langStringEscaped = [langString    
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

//My_Key=Google generated key
NSString *url = [NSString stringWithFormat:@"https://www.googleapis.com/language/translate/v2?
key={My_key}&source=en&target=de&q=%@",textEscaped];

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
[[NSURLConnection alloc] initWithRequest:request delegate:self];

}
- (IBAction)translate:(id)sender {
[_translations removeAllObjects];
[_textfield resignFirstResponder];
_go.enabled=NO;
self.lastText = _textfield.text;
[_translations addObject:_lastText];
_textview.text = _lastText;

[self performTranslation];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[responseData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[responseData appendData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
_textview.text = [NSString stringWithFormat:@"Connection failed: %@", [error description]];
_go.enabled = YES;
 NSLog([NSString stringWithFormat:@"Connection failed: %@", [error description]]);
 }

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

NSString *responseString = [[NSString alloc] initWithData:responseData   
encoding:NSUTF8StringEncoding];

NSMutableDictionary *luckyNumbers = [responseString JSONValue];
if (luckyNumbers != nil) {

    NSDecimalNumber * responseStatus = [luckyNumbers objectForKey:@"responseStatus"];
    if ([responseStatus intValue] != 200) {
        _go.enabled = YES;
        return;
    }

    NSMutableDictionary *responseDataDict = [luckyNumbers objectForKey:@"responseData"];
    if (responseDataDict != nil) {
        NSString *translatedText = [responseDataDict objectForKey:@"translatedText"];
        [_translations addObject:translatedText];
        self.lastText = translatedText;
        _textview.text = [_textview.text stringByAppendingFormat:@"\n%@", translatedText];
        _go.enabled = YES;
    }
}

}
@end

【问题讨论】:

    标签: ios ios7 google-translate nsurlerrordomain


    【解决方案1】:

    问题就像它说的那样。 URL 生成不正确。试试:

    NSString * source = @"en";
    NSString * target = @"ja";
    NSString * key = @"YOUR-KEY";
    
    NSString * url = [NSString stringWithFormat:@"https://www.googleapis.com/language/translate/v2?key=%@&source=%@&target=%@",key,source,target];
    

    看看你得到什么回应。

    【讨论】:

    • 连接问题已解决,但还有另一个问题。 - (void)connectionDidFinishLoading 没有被调用,因此没有发生翻译。
    • 我用 - (void)doTranslation 方法替换了 - (void)connectionDidFinishLoading 方法,并在按钮操作事件中调用了该方法。现在我收到错误。 -JSONValue 失败。错误是:输入意外结束。
    • google API 激活需要时间。有时需要几个小时或一天。这取决于验证您的帐户以进行结算需要多长时间。抱歉打扰了。
    • 如果我的回答解决了连接问题,请标记为正确。
    【解决方案2】:

    您可以使用FGTranslator。很简单。

    FGTranslator *translator = [[FGTranslator alloc] initWithGoogleAPIKey:@"your_google_key"];
    
    [translator translateText:@"Bonjour!" 
                   completion:^(NSError *error, NSString *translated, NSString *sourceLanguage)
    {
        if (error)
            NSLog(@"translation failed with error: %@", error);
        else
            NSLog(@"translated from %@: %@", sourceLanguage, translated);
    }];
    

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
    • @infused,你去链接了吗?这是一个库,所以我不能在这里很好地转储整个代码库“以防链接页面发生变化”。但是对于它的价值,这里有一个关于如何使用它的 sn-p。
    猜你喜欢
    • 2011-12-26
    • 2010-10-10
    • 2010-12-24
    • 2013-02-15
    • 2012-01-26
    • 2012-01-19
    • 1970-01-01
    相关资源
    最近更新 更多