Browse Source

initial commit

master
Claire 2 years ago
parent
commit
0728e7e8cd
  1. 170
      base64decoder.html
  2. 75
      translator.ps1

170
base64decoder.html

@ -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>

75
translator.ps1

@ -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…
Cancel
Save