在 swift 3 iOS 中实现谷歌翻译 api

2024-01-14

你好,我是 iOS 开发新手,我正在尝试在我的应用程序中实现谷歌翻译 API。我从GitHub上在线找到了一些示例代码https://github.com/prine/ROGoogleTranslate https://github.com/prine/ROGoogleTranslate。我下载了示例代码,并按照提供的说明进行操作,从谷歌云翻译获取 api 密钥并将其放入代码中,但是代码无法正常工作,iv 查看了 GitHub 网站上的评论,发现它有 为其他开发人员工作。我真的不知道我在代码中做错了什么。

ROGoogleTranslateParams.swift

import Foundation

public struct ROGoogleTranslateParams {

    public init() {

    }

    public init(source:String, target:String, text:String) {
        self.source = source
        self.target = target
        self.text = text
    }

    public var source = "de"
    public var target = "en"
    public var text = "Hallo"
}


/// Offers easier access to the Google Translate API
open class ROGoogleTranslate {

    /// Store here the Google Translate API Key
    public var apiKey = "YOUR_API_KEY"

    ///
    /// Initial constructor
    ///
    public init() {

    }

    ///
    /// Translate a phrase from one language into another
    ///
    /// - parameter params:   ROGoogleTranslate Struct contains all the needed parameters to translate with the Google Translate API
    /// - parameter callback: The translated string will be returned in the callback
    ///
    open func translate(params:ROGoogleTranslateParams, callback:@escaping (_ translatedText:String) -> ()) {

        guard apiKey != "" else {
            print("Warning: You should set the api key before calling the translate method.")
            return
        }

        if let urlEncodedText = params.text.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) {
            if let url = URL(string: "https://translation.googleapis.com/language/translate/v2?key=\(self.apiKey)&q=\(urlEncodedText)&source=\(params.source)&target=\(params.target)&format=text") {

                let httprequest = URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) in
                    guard error == nil else {
                        print("Something went wrong: \(error?.localizedDescription)")
                        return
                    }

                    if let httpResponse = response as? HTTPURLResponse {

                        guard httpResponse.statusCode == 200 else {

                            if let data = data {
                                print("Response [\(httpResponse.statusCode)] - \(data)")
                            }

                            return
                        }

                        do {
                            // Pyramid of optional json retrieving. I know with SwiftyJSON it would be easier, but I didn't want to add an external library
                            if let data = data {
                                if let json = try JSONSerialization.jsonObject(with: data, options:JSONSerialization.ReadingOptions.mutableContainers) as? NSDictionary {
                                    if let jsonData = json["data"] as? [String : Any] {
                                        if let translations = jsonData["translations"] as? [NSDictionary] {
                                            if let translation = translations.first as? [String : Any] {
                                                if let translatedText = translation["translatedText"] as? String {
                                                    callback(translatedText)
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        } catch {
                            print("Serialization failed: \(error.localizedDescription)")
                        }
                    }
                })

                httprequest.resume()
            }
        }
    }
}

ViewController.swift

import UIKit

class ViewController: UIViewController {

    @IBOutlet var text:UITextField!
    @IBOutlet var fromLanguage:UITextField!
    @IBOutlet var toLanguage:UITextField!
    @IBOutlet var translation:UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func translate(_ sender: UIButton) {



        let translator = ROGoogleTranslate()
        translator.apiKey = "YOUR_API_KEY" // Add your API Key here

        var params = ROGoogleTranslateParams()
        params.source = fromLanguage.text ?? "de"
        params.target = toLanguage.text ?? "en"
        params.text = text.text ?? "Hallo"

        translator.translate(params: params) { (result) in
            DispatchQueue.main.async {
                self.translation.text = "\(result)"
            }
        }
    }
}

这些是使用的类。 当我按下“翻译”按钮时得到的结果如下: 响应 [403] - 355 字节

感谢您的帮助。该代码可以从提供的网址下载 谢谢


我是您上面提到的库的作者:)。我猜您收到 403 是因为您的 Google Api 帐户尚未正确激活。 Google 更改了 Translation api 的政策,并且不再免费。那么您可能没有在 Api 帐户中添加信用卡信息,因此出现 403 错误?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 swift 3 iOS 中实现谷歌翻译 api 的相关文章

  • UICollectionView 拖放文件夹创建

    我正在使用 UICollectionView 创建 iOS 画廊应用程序 我希望用户能够拖放图像来重新排序图库并创建文件夹 类似于 iPhone 上的主屏幕 我发现了以下内容tutorial http nshint io blog 2015
  • iOS 循环对象的属性并添加操作

    我有一个具有几个类似属性的类 UISliders 我想添加用户开始和结束使用每个滑块时的操作 每个滑块都将链接到同一个选择器 因此我考虑只是迭代它们 而不是编写 10 个几乎相同的代码块 问题是 最有效的方法是什么 我尝试过这样的事情 在运
  • NVActivityIndi​​catorView 仅适用于特定视图

    我正在使用这个库https github com ninjaprox NVActivityIndi catorView https github com ninjaprox NVActivityIndicatorView用于显示加载指示器
  • 避免 UIImage 的 imageNamed - 内存管理

    我正在经历这个链接 http akosma com 2009 01 28 10 iphone memory management tips 我遇到了一个点避免 UIImage 的 imageNamed 出于什么原因我们应该避免这种情况 它会
  • UIWebView Bug:-[UIWebView cut:]:无法识别的选择器发送到实例

    In the UIWebView 如果包含文本的输入元素具有焦点 并且按下按钮导致输入失去焦点 则随后双击输入以重新获得焦点并从出现的弹出栏中选择 剪切 或 复制 或 粘贴 会导致这UIWebView因错误而崩溃 UIWebView cut
  • 如何反转 CGPath 的点顺序

    我想画一个圆圈 并用它打出字母 为此 我需要顺时针抚摸圆圈 逆时针抚摸字母 这一切都很好 但是当我使用 Core Text 获取字母路径时 我不知道如何从本质上反转该路径 不是镜像或旋转或任何东西 这很简单 我希望点笔画顺序是逆时针的 这实
  • 在故事板中的视图控制器之间滑动手势

    我希望添加左右滑动手势来在视图控制器之间进行更改 这是否可能 并且有没有一种简单的方法可以在故事板中执行此操作 谢谢 故事板允许您在两个视图控制器之间设置 Segues 我想说首先在视图之间附加 Segues 给它一个标识符 然后使用类似的
  • 分发内部业务 IOS 应用程序

    我遇到了 IOS 应用程序分发的一个令人困惑的部分 因此 我需要简单细分一下我的限制 即仅将我的应用程序分发给我的员工 同事或任何被视为 内部 的人 这是表明我不希望该应用程序出现在应用程序商店中的另一种方式 我的情况是我为几家公司开发 他
  • RemoteIO 音频单元播放回调中的 AudioBufferList 内容

    我想 拦截 音频数据传送到 iOS 设备扬声器的过程 我相信这可以使用 RemoteIO 音频单元和回调来完成 在下面的playbackCallback中 ioData实际上包含任何音频数据吗 static OSStatus playbac
  • 在 swift3 中结合平移、alpha 和缩放动画

    我是 iOS Swift 开发的新手 我尝试将三个参数组合在一个动画中 但没有成功 我认为解决方案就在这里 Apple Dev Core 动画编程指南 https developer apple com library content do
  • iOS 13 beta 外部屏幕上的 OverscanCompensation

    我正在测试一个应用程序的测试版 但遇到了外部屏幕的问题 我们看到应用程序周围有黑色边框 我们之前可以通过设置来纠正它overscanCompensation to none但在 iOS 13 中 该设置根本没有任何效果 我们曾经看到一个错误
  • 核心数据 NSFetchRequest 还获取实体的子对象

    我是 iOS 开发和 Core Data 的新手 我有一个父 NSManagedObject class Units interface Properties NSManagedObject property nonatomic retai
  • 仅将 UIImage 移动到另一个 UIImage 内部

    I have an UIImage which is shown in an UIImageView I also have another image in an UIImageView which lays above the firs
  • 检索 iPhone 中的 Outlook 联系人

    我想通过应用程序导入所有 Outlook 联系人 有什么办法可以做到这一点吗 请告诉我 您可以通过实施 Microsoft Exchange 服务器协议来实现此目的 微软MSDN http msdn microsoft com en us
  • React Native:不透明视图内的透明视图

    我想用不透明框架和透明中心显示相机的视图 就像图片中的一样 黑色部分是相机的视图 我正在寻找具有纯反应本机组件的解决方案 没有额外的库 例如https github com gilbox react native masked view h
  • 防止UIScrollView的UIPanGestureRecognizer遮挡UIScreenEdgePanGestureRecognizer

    我有一个UIScrollView它填满了我应用程序的一页上的屏幕 但我希望允许用户从屏幕边缘平移以显示其后面的视图 问题是 UIScrollView 窃取了我的触摸UIScreenEdgePanGestureRecognizer在屏幕边缘
  • -[EAGLContext renderbufferStorage:fromDrawable:] 第二次失败?

    我正在开发一个 iOS openGL ES 应用程序 我正在做通常的 EAGLView ES2Render 的事情 启动时 使用以下代码成功创建 frambuffer BOOL createFramebuffers EAGLContext
  • 带有 Core Data 对象的动态 UITableView 高度

    过去几天我一直在试图解决一个谜团 即为什么我的批处理大小为 20 的 NSFetchedResultsController 总是在获取完成后立即错误 即加载到内存中 我的所有对象 从而导致请求需要约 20 秒 事实证明 这是因为在我的 he
  • 将带有地理位置数据的照片保存到照片库 Swift 3

    如何使用地理位置元数据将照片保存到照片库 我已请求 并允许 应用程序访问用户位置 private func allowAccessToUserLocation locationManager CLLocationManager locati
  • GMSMapView 中的倒多边形

    我必须在我的 iPhone 项目中使用 Google 地图 并且我正在使用 GMSPolygon 来绘制多边形 但是如何填充地图上除多边形内部之外的所有位置 就像下图一样 谢谢 我玩过你的问题 主要思想是用多边形填充整个地球 然后为您的特定

随机推荐

  • 以角度动态更改 css 变量

    在我的角度项目中 我在顶层定义了一些 css 变量样式 scss像这样的文件 我在很多地方使用这些变量来保持整个主题的一致性 root theme color 1 f7f7f7 theme color 2 ec4d3b theme colo
  • Android启动意图查看apk

    在我的应用程序中 我下载一个 apk 并将其保存到 SD 卡 然后我想开始安装该 apk 我正在使用以下代码来尝试此操作 Intent intent new Intent intent setAction Intent ACTION VIE
  • Mathematica 中的变换分布

    我开发了一些代码来从 LogNormalDistribution 和 StableDistribution 的乘积生成随机变量 LNStableRV Alpha Beta Gamma Sigma Delta n Module LNRV SD
  • 如何找到相交矩形的交点矩形(点)

    如果我有两个相交的矩形 x1 y1 x2 y2 x3 y3 x4 y4 由两个顶点描述 如何找到一个由它们的交集产生的矩形 得到这些矩形相交的 2 个点 编程语言并不重要 可能是伪代码 PS 矩形与 OXY 平行 你可以使用矩形 交集 ht
  • 让 VertexRenderingFunction 缩放(不缩放)

    我在自定义 VertexRenderingFunction 以不同尺寸显示不同图形时遇到问题 下面是一个示例 默认的顶点渲染函数具有所需的行为 因为顶点在所有图中看起来都相同 有什么建议如何使用自定义顶点来实现这一点吗 source yar
  • 软件生成的中断和软件生成的异常有什么区别?

    我正在阅读英特尔手册 3A 第 6 章中断和异常处理 中断和异常分别有3个来源 对于软件生成的中断 它说 INT n 指令允许从内部产生中断 软件通过提供中断向量号作为操作数 为了 例如 INT 35 指令强制隐式调用 中断 35 的中断处
  • urllib2 中重复主机查找失败

    我的代码使用 Python 的 urllib2 在多个线程中发出许多 HTTP GET 请求 将响应写入文件 每个线程一个 在执行过程中 看起来许多主机查找失败 导致名称或服务未知错误 请参阅附加的错误日志以获取示例 这是由于 DNS 服务
  • Google Analytics API 在示例代码中返回 401

    我正在尝试从谷歌分析的内容实验中检索数据 我正在使用以下代码 我的信用良好 并且已针对这篇文章进行了审查
  • 查找 exe 是否动态链接(Windows)

    windows下如何判断一个exe是动态链接还是静态链接 所有 Windows 应用程序都动态链接到 Windows API 如果您需要确定特定的非 Windows 库 如 libxml 或类似库 的链接方式 Visual Studio 包
  • 使用 YouTube API v3 检查视频是否有年龄限制

    有没有办法使用 YouTube API v3 来检查视频是否有年龄限制 查看文档我无法确认这一点 我发现了一些与此相关的内容 请检查 https www googleapis com youtube v3 videos part conte
  • 错误 [ERR_REQUIRE_ESM]:如何在节点 12 中使用 es6 模块?

    From https 2ality com 2019 04 nodejs esm impl html https 2ality com 2019 04 nodejs esm impl htmlNode 12应该支持es6模块 但是 我不断收
  • python-tz 是我错了还是它是一个错误

    这似乎有点奇怪 当我想用 pytz 获取欧洲 巴黎时区时 它让我进入 PMT 时区 而不是 GMT 1 当它似乎适用于欧洲 柏林时 不清楚 看看这个片段 usr bin python import os import datetime fr
  • `numpy.argmax()` 的理论平均情况运行时复杂度

    我正在看代码numpy argmax功能 我很困惑哪种数据结构numpy维持为argmax功能 https numpy org doc stable reference generated numpy argmax html https n
  • 使用 VS 项目检查代码的 xslt 将 Xml 转换为 html

    我有一个InspectionResults xml当我运行时生成的inspectcode exe from JetbrainsCommandLine Tool Analysis 有没有xslt提供的文件Jetbrains将此 xml 转换为
  • 使用 setuptools 创建 python 可执行文件

    我有一个小的 python 应用程序 我想将其制作为类 UNIX 系统的可下载 可安装的可执行文件 我的印象是安装工具将是实现这一目标的最佳方法 但不知何故 这似乎不是一项常见任务 我的目录结构如下所示 myappname setup py
  • Kafka 连接到节点 ubuntukafka 时出错:9092(id:0 机架:null)(org.apache.kafka.clients.NetworkClient)java.net.UnknownHostException:

    我在 VirtualBox 来宾上有两台服务器 每个服务器都是 ubuntu 我可以从我的主机通过 SSH 连接到两台机器 以及两台机器之间的 SSH 这样它们都具有 natnetwork 我在一台服务器 kafka 上运行 如下所述 ht
  • Python 格式最佳实践

    我刚刚熟悉 Python 并且有一个关于在字符串上使用 format 的最佳实践 或至少是常见实践 的问题 我的问题主要是关于何时使用空白大括号 索引号和名称 例如 如果您想将一个变量包含在字符串中 您会选择哪一个 print I Stac
  • NASM:磁盘读取超时

    尝试从磁盘 从同一文件 读取数据 将另外 2 个 512 字节扇区加载到内存中 磁盘读取功能如下 read DH sectors to ES BX from drive DL disk read push dx push bx Tried
  • Google Apps 脚本 location.reload 在网络应用程序中

    我正在使用一个 GAS Web 应用程序 当用户执行某些操作 例如单击特定的 div 时 该应用程序需要刷新其内容 在客户端 我有一个从 onclick 调用的脚本 google script run withSuccessHandler
  • 在 swift 3 iOS 中实现谷歌翻译 api

    你好 我是 iOS 开发新手 我正在尝试在我的应用程序中实现谷歌翻译 API 我从GitHub上在线找到了一些示例代码https github com prine ROGoogleTranslate https github com pri