2 changed files with 245 additions and 0 deletions
@ -0,0 +1,170 @@
|
||||
<html> |
||||
|
||||
<head> |
||||
<meta charset="ISO-8859-1"> |
||||
<script> |
||||
var to64 = false; |
||||
var txtInput = 'txt64'; |
||||
var txtOutput = 'txtjp'; |
||||
|
||||
var butts = ''; |
||||
|
||||
function utf8_to_b64(str) { |
||||
return window.btoa(unescape(encodeURIComponent(str))); |
||||
} |
||||
|
||||
function b64_to_utf8(str) { |
||||
return decodeURIComponent(escape(window.atob(str))); |
||||
} |
||||
|
||||
function fixtext() { |
||||
try { |
||||
document.getElementById('msg').innerText = ''; |
||||
var txt = document.getElementById(txtInput).value; |
||||
|
||||
if (to64) { |
||||
// txt = txt.replace(/"/g, '""').replace(/\\\//g, '/'); |
||||
txt = utf8_to_b64(txt); |
||||
} else { |
||||
// txt = txt.replace(/""/g, '"').replace(/\//g, '\\\/'); |
||||
txt = b64_to_utf8(txt); |
||||
} |
||||
|
||||
document.getElementById(txtOutput).value = txt; |
||||
document.getElementById('txtcopy').value = txt; |
||||
|
||||
document.getElementById('msg').innerText = "Text converted!"; |
||||
} catch (e) { |
||||
document.getElementById('msg').innerText = e; |
||||
} |
||||
} |
||||
|
||||
async function transtext(str) { |
||||
if (str != '') { |
||||
document.getElementById('msg').innerText = "Translating..."; |
||||
const res = await fetch("https://translate.mentality.rip/translate", { |
||||
method: "POST", |
||||
body: JSON.stringify({ |
||||
q: str, |
||||
source: "ja", |
||||
target: "en" |
||||
}), |
||||
headers: { |
||||
"Content-Type": "application/json" |
||||
} |
||||
}); |
||||
|
||||
document.getElementById('msg').innerText = "Text translated!"; |
||||
|
||||
// console.log(await res.json()); |
||||
jres = await res.json(); |
||||
document.getElementById('txten').value = jres.translatedText; |
||||
document.getElementById('txtcopy').value = jres.translatedText; |
||||
} |
||||
} |
||||
|
||||
function copytext() { |
||||
try { |
||||
var txtcopy = document.getElementById('txtcopy'); |
||||
txtcopy.select(); |
||||
txtcopy.setSelectionRange(0, 99999); |
||||
document.execCommand("copy"); |
||||
document.getElementById('msg').innerText = 'Copied to clipboard!'; |
||||
} catch (e) { |
||||
document.getElementById('msg').innerText = e; |
||||
} |
||||
} |
||||
</script> |
||||
<style> |
||||
BODY, |
||||
INPUT { |
||||
font-family: 'Perspective Sans', 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; |
||||
} |
||||
|
||||
HR { |
||||
clear: both; |
||||
border: none; |
||||
border-bottom: 1px dashed #6a6a6a; |
||||
} |
||||
|
||||
H4 { |
||||
margin: 0.5em 0; |
||||
} |
||||
|
||||
TEXTAREA { |
||||
clear: both; |
||||
width: 100%; |
||||
max-width: 300px; |
||||
height: calc(50% - 3em); |
||||
min-height: 25px; |
||||
max-height: 100px; |
||||
} |
||||
|
||||
TEXTAREA { |
||||
background-color: #333; |
||||
color: #fff; |
||||
} |
||||
|
||||
#buttons, |
||||
#direction, |
||||
#msg { |
||||
float: left; |
||||
margin-bottom: 0.5em; |
||||
} |
||||
|
||||
#buttons { |
||||
margin-right: 0.5em; |
||||
} |
||||
|
||||
#buttons INPUT { |
||||
height: 2.2em; |
||||
font-size: .8em; |
||||
} |
||||
|
||||
#buttons INPUT[name="flip"] { |
||||
padding-bottom: 3px; |
||||
} |
||||
|
||||
#direction { |
||||
margin-bottom: 0; |
||||
line-height: 1.5em; |
||||
font-size: 1.25em; |
||||
} |
||||
|
||||
#msg { |
||||
margin-left: 1em; |
||||
font-size: .9em; |
||||
line-height: 2em; |
||||
color: #0ba82d; |
||||
} |
||||
|
||||
#txtcopy { |
||||
min-height: 0px; |
||||
height: 0px; |
||||
border: none; |
||||
opacity: 0; |
||||
} |
||||
</style> |
||||
</head> |
||||
|
||||
<body> |
||||
<form accept-charset="utf-8"> |
||||
<h4>Base64</h4> |
||||
<textarea id="txt64" onkeyup="fixtext();"></textarea> |
||||
<hr/> |
||||
<div id="buttons"> |
||||
<input type="button" name="submit" onclick="fixtext();" value="Format"> |
||||
<input type="button" name="translate" onclick="transtext(document.getElementById('txtjp').value);" value="Translate"> |
||||
<input type="button" name="copy" onclick="copytext();" value="Copy Result"> |
||||
</div> |
||||
<div id="msg"></div> |
||||
<hr/> |
||||
<h4>Japanese</h4> |
||||
<textarea id="txtjp" disabled="disabled" onkeyup="fixtext();"></textarea> |
||||
<h4>English</h4> |
||||
<textarea id="txten" disabled="disabled"></textarea> |
||||
<textarea id="txtcopy"></textarea> |
||||
</form> |
||||
</body> |
||||
|
||||
</html> |
@ -0,0 +1,75 @@
|
||||
$lines = Get-Content .\MainMenu.xib -Encoding UTF8 |
||||
|
||||
$output = $lines |
||||
|
||||
$regex = '<string type="base64-UTF8" key="NSDev">(?<txt>.+?)<\/string>' |
||||
|
||||
$strings = [regex]::Matches($lines,$regex) |
||||
|
||||
$url = 'https://translate.mentality.rip/translate' |
||||
|
||||
$errors = @() |
||||
|
||||
$csv = 'Base64JP,UTF8JP,Base64EN,UTF8EN' |
||||
|
||||
foreach($string in $strings) { |
||||
# get the value |
||||
$txt = $string.Groups["txt"].Value |
||||
|
||||
# append appropriate padding |
||||
$mod = ($txt.length % 4) |
||||
switch ($mod) { |
||||
'0' {$txtp = $txt} |
||||
'1' {$txtp = $txt.Substring(0,$txt.Length - 1)} |
||||
'2' {$txtp = $txt + ('=' * (4 - $mod))} |
||||
'3' {$txtp = $txt + ('=' * (4 - $mod))} |
||||
|
||||
} |
||||
|
||||
# convert the base64 to UTF8 text |
||||
$utf = [Text.Encoding]::Utf8.GetString([Convert]::FromBase64String($txtp)) |
||||
|
||||
# get current array index |
||||
$idx = [array]::IndexOf($strings,$string) |
||||
|
||||
# get percent complete |
||||
$pct = (($idx + 1) / $strings.Count) * 100 |
||||
|
||||
# round the percent |
||||
$pcn = [math]::Round($pct,2) |
||||
|
||||
# update the status bar |
||||
Write-Progress -Activity ("Translating <<" + $utf + ">>") -Status "$pcn% Complete:" -PercentComplete $pct |
||||
|
||||
# create the json request |
||||
$json = '{"q":"' + $utf + '","source":"ja","target":"en"}' |
||||
|
||||
# add delay due to api throttle |
||||
Start-Sleep -Seconds 1.5 |
||||
|
||||
try { |
||||
# post the request to the translation service |
||||
$result = Invoke-WebRequest -Method 'Post' -Uri $url -Body $json -ContentType "application/json; charset=utf-8" |
||||
|
||||
# this is the english translation |
||||
$ttxt = ($result.Content | ConvertFrom-Json).translatedText |
||||
|
||||
# convert the english translation to base64 using .net |
||||
$txt64 = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($ttxt)) |
||||
|
||||
# remove the padding == because these don't exist in the original XIB |
||||
$txt64clean = $txt64 -replace '=','' |
||||
|
||||
# replace the value everywhere it occurs in the source data |
||||
$output = $output -replace $txt,$txt64clean |
||||
|
||||
# add to the csv |
||||
$csv += "`n""$txt"",""$utf"",""$txt64clean"",""$ttxt""" |
||||
} catch { |
||||
Write-Host ("Couldn't translate <<" + $utf + ">>") |
||||
$errors += $utf |
||||
} |
||||
} |
||||
|
||||
$output | Out-File Output.xib -Encoding utf8 |
||||
$csv | Out-File output.csv -Encoding utf8 |
Loading…
issues.context.reference_issue