Skip to content

Commit 6bd9db8

Browse files
committed
Implement Reverso Context #19
- Support languages in GTranslator
1 parent 97bb099 commit 6bd9db8

File tree

3 files changed

+27
-20
lines changed

3 files changed

+27
-20
lines changed

ReaderTranslator/Components/GTranslator.swift

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ struct GTranslator : ViewRepresentable, WKScriptsSetup {
1616
static var pageView: WKPageView?
1717

1818
@ObservedObject private var store = Store.shared
19-
private let defaultUrl = "https://translate.google.com?sl=auto&tl=ru"
19+
private let defaultUrl = "https://translate.google.com?op=translate&sl=auto&tl=ru"
2020

2121
class Coordinator: WKCoordinator {
2222
@Published var selectedText = TranslateAction.translator(text: "")
@@ -57,29 +57,19 @@ struct GTranslator : ViewRepresentable, WKScriptsSetup {
5757

5858
func updateView(_ view: WKPageView, context: Context) {
5959
print("Translator_updateView")
60-
let lastUrl = view.url?.absoluteString.replacingOccurrences(of: "#view=home", with: "")
61-
let url = lastUrl ?? defaultUrl
62-
63-
guard var urlComponent = URLComponents(string: url) else { return }
64-
guard let queryItems = urlComponent.queryItems else { return }
65-
66-
let oldText = queryItems.first(where: { $0.name == "text" })?.value ?? ""
67-
6860
if case let .translator(text, noReversoContext) = selectedText,
69-
text != "",
70-
text != oldText {
71-
72-
let sl = queryItems.first(where: { $0.name == "sl" })?.value
73-
let tl = queryItems.first(where: { $0.name == "tl" })?.value
74-
61+
text != "" {
62+
let (sl, tl) = getParams(url: view.url)
63+
guard var urlComponent = URLComponents(string: defaultUrl) else { return }
7564
urlComponent.queryItems = [
65+
.init(name: "op", value: "translate"),
7666
.init(name: "sl", value: sl),
7767
.init(name: "tl", value: tl),
7868
.init(name: "text", value: text)
7969
]
8070

8171
if let url = urlComponent.url {
82-
print("Translator_updateView_reload")
72+
print("Translator_updateView_reload", url)
8373
view.load(URLRequest(url: url))
8474
}
8575

@@ -88,6 +78,21 @@ struct GTranslator : ViewRepresentable, WKScriptsSetup {
8878
}
8979
}
9080
}
81+
82+
private func getParams(url: URL?) -> (String?, String?) {
83+
let lastUrl = url?.absoluteString.replacingOccurrences(of: "#view=home", with: "")
84+
let url = lastUrl ?? defaultUrl
85+
86+
guard let urlComponent = URLComponents(string: url) else { return (nil, nil) }
87+
let queryItems = urlComponent.queryItems
88+
89+
selectedText = .none
90+
91+
let sl = queryItems?.last(where: { $0.name == "sl" })?.value
92+
let tl = queryItems?.last(where: { $0.name == "tl" })?.value
93+
94+
return (sl, tl)
95+
}
9196
}
9297

9398
extension GTranslator.Coordinator: WKScriptMessageHandler {

ReaderTranslator/Components/ReversoContext.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ struct ReversoContext : ViewRepresentable, WKScriptsSetup {
4545

4646
guard case let .reversoContext(text) = selectedText else { return }
4747

48+
selectedText = .none
49+
4850
let search = text.replacingOccurrences(of: " ", with: "+")
4951
let urlString = "\(host)\(search)"
5052

ReaderTranslator/Stores/Store.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ enum ViewMode: String, Codable {
1616
}
1717

1818
enum TranslateAction: Equatable {
19+
case none
1920
case reversoContext(text: String)
2021
case translator(text: String, noReversoContext: Bool = false)
2122

2223
func getText() -> String {
2324
switch self {
24-
case .reversoContext(let text):
25-
return text
26-
case .translator(let text, _):
27-
return text
25+
case .none: return ""
26+
case .reversoContext(let text): return text
27+
case .translator(let text, _): return text
2828
}
2929
}
3030
}

0 commit comments

Comments
 (0)