Drop basic login as captcha is mandatory now
This commit is contained in:
1 parent
18caa87512
commit
e07aab4434
16 files changed
+35
-346
No files matched your search
@@ -44,7 +44,6 @@ import com.hippo.ehviewer.client.parser.GalleryTokenApiParser
|
||||
import com.hippo.ehviewer.client.parser.HomeParser
|
||||
import com.hippo.ehviewer.client.parser.ProfileParser
|
||||
import com.hippo.ehviewer.client.parser.RateGalleryResult
|
||||
import com.hippo.ehviewer.client.parser.SignInParser
|
||||
import com.hippo.ehviewer.client.parser.TorrentParser
|
||||
import com.hippo.ehviewer.client.parser.TorrentResult
|
||||
import com.hippo.ehviewer.client.parser.VoteCommentResult
|
||||
@@ -233,22 +232,6 @@ object EhEngine {
|
||||
suspend fun getFavorites(url: String) = ehRequest(url, EhUrl.referer).fetchUsingAsByteBuffer(FavoritesParser::parse)
|
||||
.apply { galleryInfoList.fillInfo(url) }
|
||||
|
||||
suspend fun signIn(username: String, password: String): String {
|
||||
val referer = "https://forums.e-hentai.org/index.php?act=Login&CODE=00"
|
||||
val url = EhUrl.API_SIGN_IN
|
||||
val origin = "https://forums.e-hentai.org"
|
||||
return ehRequest(url, referer, origin) {
|
||||
formBody {
|
||||
append("referer", referer)
|
||||
append("b", "")
|
||||
append("bt", "")
|
||||
append("UserName", username)
|
||||
append("PassWord", password)
|
||||
append("CookieDate", "1")
|
||||
}
|
||||
}.fetchUsingAsText(SignInParser::parse)
|
||||
}
|
||||
|
||||
suspend fun commentGallery(url: String, comment: String, id: Long = -1) = ehRequest(url, url, EhUrl.origin) {
|
||||
formBody {
|
||||
if (id == -1L) {
|
||||
|
||||
@@ -36,7 +36,6 @@ object EhUrl {
|
||||
const val API_E = "https://api.e-hentai.org/api.php"
|
||||
const val URL_UCONFIG_E = HOST_E + "uconfig.php"
|
||||
const val URL_MY_TAGS_E = HOST_E + "mytags"
|
||||
const val API_SIGN_IN = "https://forums.e-hentai.org/index.php?act=Login&CODE=01"
|
||||
const val URL_POPULAR_E = "https://e-hentai.org/popular"
|
||||
const val URL_POPULAR_EX = "https://exhentai.org/popular"
|
||||
const val URL_IMAGE_SEARCH_E = "https://upload.e-hentai.org/image_lookup.php"
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
/*
|
||||
* Copyright 2016 Hippo Seven
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.hippo.ehviewer.client.parser
|
||||
|
||||
import com.hippo.ehviewer.client.exception.EhException
|
||||
import com.hippo.ehviewer.client.exception.ParseException
|
||||
import java.util.regex.Pattern
|
||||
|
||||
object SignInParser {
|
||||
private val NAME_PATTERN = Pattern.compile("<p>You are now logged in as: (.+?)<")
|
||||
private val ERROR_PATTERN = Pattern.compile(
|
||||
"<h4>The error returned was:</h4>\\s*<p>(.+?)</p>" +
|
||||
"|<span class=\"postcolor\">(.+?)</span>",
|
||||
)
|
||||
|
||||
fun parse(body: String): String {
|
||||
var m = NAME_PATTERN.matcher(body)
|
||||
return if (m.find()) {
|
||||
m.group(1)!!
|
||||
} else {
|
||||
m = ERROR_PATTERN.matcher(body)
|
||||
if (m.find()) {
|
||||
throw EhException(m.group(1) ?: m.group(2))
|
||||
} else {
|
||||
throw ParseException("Can't parse sign in")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,66 +14,37 @@ import androidx.compose.foundation.layout.systemBarsPadding
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.layout.widthIn
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.text.KeyboardActions
|
||||
import androidx.compose.foundation.text.KeyboardOptions
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Info
|
||||
import androidx.compose.material.icons.filled.Visibility
|
||||
import androidx.compose.material.icons.filled.VisibilityOff
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.material3.FilledTonalButton
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.OutlinedTextField
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalFocusManager
|
||||
import androidx.compose.ui.res.dimensionResource
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.SpanStyle
|
||||
import androidx.compose.ui.text.buildAnnotatedString
|
||||
import androidx.compose.ui.text.input.ImeAction
|
||||
import androidx.compose.ui.text.input.KeyboardType
|
||||
import androidx.compose.ui.text.input.PasswordVisualTransformation
|
||||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.text.style.TextDecoration
|
||||
import androidx.compose.ui.text.withStyle
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.hippo.ehviewer.R
|
||||
import com.hippo.ehviewer.Settings
|
||||
import com.hippo.ehviewer.client.EhEngine
|
||||
import com.hippo.ehviewer.client.EhUrl
|
||||
import com.hippo.ehviewer.client.EhUtils
|
||||
import com.hippo.ehviewer.ui.LockDrawer
|
||||
import com.hippo.ehviewer.ui.StartDestination
|
||||
import com.hippo.ehviewer.ui.destinations.WebViewSignInScreenDestination
|
||||
import com.hippo.ehviewer.ui.openBrowser
|
||||
import com.hippo.ehviewer.ui.screen.popNavigate
|
||||
import com.hippo.ehviewer.ui.tools.LocalDialogState
|
||||
import com.hippo.ehviewer.ui.tools.LocalWindowSizeClass
|
||||
import com.hippo.ehviewer.util.displayString
|
||||
import com.ramcosta.composedestinations.annotation.Destination
|
||||
import com.ramcosta.composedestinations.annotation.RootNavGraph
|
||||
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
||||
import eu.kanade.tachiyomi.util.lang.launchIO
|
||||
import eu.kanade.tachiyomi.util.lang.withNonCancellableContext
|
||||
import eu.kanade.tachiyomi.util.lang.withUIContext
|
||||
import kotlinx.coroutines.Job
|
||||
|
||||
@RootNavGraph(start = true)
|
||||
@Destination
|
||||
@@ -81,100 +52,7 @@ import kotlinx.coroutines.Job
|
||||
fun SignInScreen(navigator: DestinationsNavigator) {
|
||||
LockDrawer(true)
|
||||
val windowSizeClass = LocalWindowSizeClass.current
|
||||
val coroutineScope = rememberCoroutineScope()
|
||||
val focusManager = LocalFocusManager.current
|
||||
var isProgressIndicatorVisible by rememberSaveable { mutableStateOf(false) }
|
||||
var showUsernameError by rememberSaveable { mutableStateOf(false) }
|
||||
var showPasswordError by rememberSaveable { mutableStateOf(false) }
|
||||
var username by rememberSaveable { mutableStateOf("") }
|
||||
var password by rememberSaveable { mutableStateOf("") }
|
||||
var passwordHidden by rememberSaveable { mutableStateOf(true) }
|
||||
val context = LocalContext.current
|
||||
var signInJob by remember { mutableStateOf<Job?>(null) }
|
||||
val dialogState = LocalDialogState.current
|
||||
|
||||
fun signIn() {
|
||||
if (signInJob?.isActive == true) return
|
||||
if (username.isEmpty()) {
|
||||
showUsernameError = true
|
||||
return
|
||||
} else {
|
||||
showUsernameError = false
|
||||
}
|
||||
if (password.isEmpty()) {
|
||||
showPasswordError = true
|
||||
return
|
||||
} else {
|
||||
showPasswordError = false
|
||||
}
|
||||
focusManager.clearFocus()
|
||||
isProgressIndicatorVisible = true
|
||||
|
||||
EhUtils.signOut()
|
||||
signInJob = coroutineScope.launchIO {
|
||||
runCatching {
|
||||
EhEngine.signIn(username, password)
|
||||
}.onFailure {
|
||||
withUIContext {
|
||||
focusManager.clearFocus()
|
||||
dialogState.awaitPermissionOrCancel(
|
||||
confirmText = R.string.get_it,
|
||||
title = R.string.sign_in_failed,
|
||||
showCancelButton = false,
|
||||
text = {
|
||||
Text(
|
||||
"""
|
||||
${it.displayString()}
|
||||
${stringResource(R.string.sign_in_failed_tip)}
|
||||
""".trimIndent(),
|
||||
)
|
||||
},
|
||||
)
|
||||
isProgressIndicatorVisible = false
|
||||
}
|
||||
}.onSuccess {
|
||||
withNonCancellableContext { postLogin() }
|
||||
withUIContext { navigator.popNavigate(StartDestination) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun UsernameAndPasswordTextField() {
|
||||
OutlinedTextField(
|
||||
value = username,
|
||||
onValueChange = { username = it },
|
||||
modifier = Modifier.width(dimensionResource(id = R.dimen.single_max_width)),
|
||||
label = { Text(stringResource(R.string.username)) },
|
||||
supportingText = { if (showUsernameError) Text(stringResource(R.string.error_username_cannot_empty)) },
|
||||
trailingIcon = { if (showUsernameError) Icon(imageVector = Icons.Filled.Info, contentDescription = null) },
|
||||
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next),
|
||||
singleLine = true,
|
||||
isError = showUsernameError,
|
||||
)
|
||||
OutlinedTextField(
|
||||
value = password,
|
||||
onValueChange = { password = it },
|
||||
Modifier.width(dimensionResource(id = R.dimen.single_max_width)),
|
||||
label = { Text(stringResource(R.string.password)) },
|
||||
visualTransformation = if (passwordHidden) PasswordVisualTransformation() else VisualTransformation.None,
|
||||
supportingText = { if (showPasswordError) Text(stringResource(R.string.error_password_cannot_empty)) },
|
||||
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password),
|
||||
keyboardActions = KeyboardActions(onDone = { signIn() }),
|
||||
trailingIcon = {
|
||||
if (showPasswordError) {
|
||||
Icon(imageVector = Icons.Filled.Info, contentDescription = null)
|
||||
} else {
|
||||
IconButton(onClick = { passwordHidden = !passwordHidden }) {
|
||||
val visibilityIcon = if (passwordHidden) Icons.Filled.Visibility else Icons.Filled.VisibilityOff
|
||||
Icon(imageVector = visibilityIcon, contentDescription = null)
|
||||
}
|
||||
}
|
||||
},
|
||||
singleLine = true,
|
||||
isError = showPasswordError,
|
||||
)
|
||||
}
|
||||
|
||||
Box(contentAlignment = Alignment.Center) {
|
||||
when (windowSizeClass.widthSizeClass) {
|
||||
@@ -188,7 +66,6 @@ fun SignInScreen(navigator: DestinationsNavigator) {
|
||||
contentDescription = null,
|
||||
modifier = Modifier.padding(dimensionResource(id = R.dimen.keyline_margin)),
|
||||
)
|
||||
UsernameAndPasswordTextField()
|
||||
Text(
|
||||
text = stringResource(id = R.string.app_waring),
|
||||
modifier = Modifier.widthIn(max = dimensionResource(id = R.dimen.single_max_width)).padding(top = 24.dp),
|
||||
@@ -199,7 +76,7 @@ fun SignInScreen(navigator: DestinationsNavigator) {
|
||||
modifier = Modifier.widthIn(max = dimensionResource(id = R.dimen.single_max_width)).padding(top = 12.dp),
|
||||
style = MaterialTheme.typography.headlineMedium,
|
||||
)
|
||||
Spacer(modifier = Modifier.weight(1f))
|
||||
Spacer(modifier = Modifier.height(dimensionResource(id = R.dimen.keyline_margin)))
|
||||
Row(modifier = Modifier.padding(top = dimensionResource(R.dimen.keyline_margin))) {
|
||||
FilledTonalButton(
|
||||
onClick = { context.openBrowser(EhUrl.URL_REGISTER) },
|
||||
@@ -208,44 +85,28 @@ fun SignInScreen(navigator: DestinationsNavigator) {
|
||||
Text(text = stringResource(id = R.string.register))
|
||||
}
|
||||
Button(
|
||||
onClick = ::signIn,
|
||||
onClick = { navigator.navigate(WebViewSignInScreenDestination) },
|
||||
modifier = Modifier.weight(1f).padding(horizontal = 4.dp),
|
||||
) {
|
||||
Text(text = stringResource(id = R.string.sign_in))
|
||||
}
|
||||
}
|
||||
Row(modifier = Modifier.padding(horizontal = 4.dp)) {
|
||||
TextButton(
|
||||
onClick = { navigator.navigate(WebViewSignInScreenDestination) },
|
||||
modifier = Modifier.padding(horizontal = 8.dp),
|
||||
) {
|
||||
Text(
|
||||
text = buildAnnotatedString {
|
||||
withStyle(
|
||||
style = SpanStyle(textDecoration = TextDecoration.Underline),
|
||||
) {
|
||||
append(stringResource(id = R.string.sign_in_via_webview))
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
TextButton(
|
||||
onClick = {
|
||||
Settings.needSignIn = false
|
||||
Settings.gallerySite = EhUrl.SITE_E
|
||||
navigator.popNavigate(StartDestination)
|
||||
TextButton(
|
||||
onClick = {
|
||||
Settings.needSignIn = false
|
||||
Settings.gallerySite = EhUrl.SITE_E
|
||||
navigator.popNavigate(StartDestination)
|
||||
},
|
||||
) {
|
||||
Text(
|
||||
text = buildAnnotatedString {
|
||||
withStyle(
|
||||
style = SpanStyle(textDecoration = TextDecoration.Underline),
|
||||
) {
|
||||
append(stringResource(id = R.string.guest_mode))
|
||||
}
|
||||
},
|
||||
) {
|
||||
Text(
|
||||
text = buildAnnotatedString {
|
||||
withStyle(
|
||||
style = SpanStyle(textDecoration = TextDecoration.Underline),
|
||||
) {
|
||||
append(stringResource(id = R.string.guest_mode))
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -279,11 +140,10 @@ fun SignInScreen(navigator: DestinationsNavigator) {
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
UsernameAndPasswordTextField()
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
Spacer(modifier = Modifier.height(48.dp))
|
||||
Row(horizontalArrangement = Arrangement.Center) {
|
||||
Button(
|
||||
onClick = ::signIn,
|
||||
onClick = { navigator.navigate(WebViewSignInScreenDestination) },
|
||||
modifier = Modifier.padding(horizontal = 4.dp).width(128.dp),
|
||||
) {
|
||||
Text(text = stringResource(id = R.string.sign_in))
|
||||
@@ -296,46 +156,27 @@ fun SignInScreen(navigator: DestinationsNavigator) {
|
||||
}
|
||||
}
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
Row(horizontalArrangement = Arrangement.Center) {
|
||||
TextButton(
|
||||
onClick = { navigator.navigate(WebViewSignInScreenDestination) },
|
||||
modifier = Modifier.padding(horizontal = 4.dp),
|
||||
) {
|
||||
Text(
|
||||
text = buildAnnotatedString {
|
||||
withStyle(
|
||||
style = SpanStyle(textDecoration = TextDecoration.Underline),
|
||||
) {
|
||||
append(stringResource(id = R.string.sign_in_via_webview))
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
TextButton(
|
||||
onClick = {
|
||||
Settings.needSignIn = false
|
||||
Settings.gallerySite = EhUrl.SITE_E
|
||||
navigator.popNavigate(StartDestination)
|
||||
TextButton(
|
||||
onClick = {
|
||||
Settings.needSignIn = false
|
||||
Settings.gallerySite = EhUrl.SITE_E
|
||||
navigator.popNavigate(StartDestination)
|
||||
},
|
||||
modifier = Modifier.padding(horizontal = 4.dp),
|
||||
) {
|
||||
Text(
|
||||
text = buildAnnotatedString {
|
||||
withStyle(
|
||||
style = SpanStyle(textDecoration = TextDecoration.Underline),
|
||||
) {
|
||||
append(stringResource(id = R.string.guest_mode))
|
||||
}
|
||||
},
|
||||
modifier = Modifier.padding(horizontal = 4.dp),
|
||||
) {
|
||||
Text(
|
||||
text = buildAnnotatedString {
|
||||
withStyle(
|
||||
style = SpanStyle(textDecoration = TextDecoration.Underline),
|
||||
) {
|
||||
append(stringResource(id = R.string.guest_mode))
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isProgressIndicatorVisible) {
|
||||
CircularProgressIndicator()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -23,11 +23,8 @@
|
||||
<string name="history">Verlauf</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="settings">Einstellungen</string>
|
||||
<string name="username">Benutzername</string>
|
||||
<string name="password">Kennwort</string>
|
||||
<string name="sign_in">Anmelden</string>
|
||||
<string name="register">Konto erstellen</string>
|
||||
<string name="sign_in_via_webview">Mit WebView anmelden</string>
|
||||
<string name="sign_in_first">Melde dich zunächst an</string>
|
||||
<string name="text_is_empty">Der Text wird nicht eingegeben</string>
|
||||
<string name="waring">Achtung</string>
|
||||
@@ -49,7 +46,6 @@
|
||||
<string name="error_get_ptoken_error">Fehler beim Erhalten pTokens</string>
|
||||
<string name="error_cant_save_image">Das Bild konnte nicht gespeichert werden</string>
|
||||
<string name="error_invalid_number">Nummer ungültig</string>
|
||||
<string name="get_it">Verstanden</string>
|
||||
<string name="gallery_list_search_bar_hint_exhentai">ExHentai durchsuchen</string>
|
||||
<string name="gallery_list_search_bar_hint_e_hentai">E-Hentai durchsuchen</string>
|
||||
<string name="gallery_list_empty_hit">Die Welt ist so groß und der Panda sitzt ganz allein</string>
|
||||
@@ -294,10 +290,7 @@
|
||||
<string name="settings_privacy_secure">Screenshot verhindern</string>
|
||||
<string name="settings_privacy_secure_summary">Screenshots werden verhindert. Inhalt der App wird in Aktuelle Apps-Liste nicht angezeigt.</string>
|
||||
<string name="app_waring">Inhalt dieser App kommt aus dem Internet, von dem einige dir körperlichen oder emotionalen Schaden zufügen kann. Du hast es wirklich erfahrt und möchtest immer noch fortsetzen.</string>
|
||||
<string name="error_username_cannot_empty">Gibt den Nutzername ein</string>
|
||||
<string name="error_password_cannot_empty">Gibt das Passwort ein</string>
|
||||
<string name="guest_mode">Anmeldung überspringen</string>
|
||||
<string name="sign_in_failed">Anmeldung fehlgeschlagen</string>
|
||||
<string name="clipboard_gallery_url_snack_message">Ein Link von einen Galerie wurde in Zwischenablage erkennt.</string>
|
||||
<string name="clipboard_gallery_url_snack_action">Gehen</string>
|
||||
<string name="settings_advanced_read_cache_size">Größe des Lesezwischenspeichers</string>
|
||||
|
||||
@@ -26,12 +26,8 @@
|
||||
<string name="downloads">Descargas</string>
|
||||
<string name="settings">Configuración</string>
|
||||
|
||||
<string name="username">Usuario</string>
|
||||
<string name="password">Contraseña</string>
|
||||
|
||||
<string name="sign_in">Iniciar sesión</string>
|
||||
<string name="register">Registrarse</string>
|
||||
<string name="sign_in_via_webview">Iniciar sesión vía web</string>
|
||||
<string name="sign_in_first">Por favor, inicie sesión primero</string>
|
||||
|
||||
<string name="text_is_empty">El texto está vacío</string>
|
||||
@@ -58,10 +54,7 @@
|
||||
<string name="error_invalid_number">Número invalido</string>
|
||||
|
||||
<string name="app_waring">El contenido de esta aplicación es de Internet. Algunas de ellas pueden causarle daño psicológico. Ahora sabes los riesgos anteriormente mencionado y te gustaría asumirlos</string>
|
||||
<string name="error_username_cannot_empty">El usuario no puede estar vacío</string>
|
||||
<string name="guest_mode">Saltar inicio de sesión</string>
|
||||
<string name="sign_in_failed">Inicio de sesión fallido</string>
|
||||
<string name="get_it">Entendido</string>
|
||||
|
||||
<!-- Gallery List -->
|
||||
<string name="gallery_list_search_bar_hint_exhentai">Buscar ExHentai</string>
|
||||
@@ -385,7 +378,6 @@
|
||||
<string name="delete">Eliminar</string>
|
||||
<string name="download_state_failed">Descarga fallida</string>
|
||||
<string name="download_state_none">Descarga en pausa</string>
|
||||
<string name="error_password_cannot_empty">La contraseña no puede estar vacía</string>
|
||||
<string name="error_something_wrong_happened">Ocurrió algo malo</string>
|
||||
<string name="settings_privacy">Privacidad</string>
|
||||
<string name="filter">Bloqueo de galerías</string>
|
||||
|
||||
@@ -26,12 +26,8 @@
|
||||
<string name="downloads">Téléchargement</string>
|
||||
<string name="settings">Paramétres</string>
|
||||
|
||||
<string name="username">Nom d\'utilisateur</string>
|
||||
<string name="password">Mot de passe</string>
|
||||
|
||||
<string name="sign_in">Se connecter</string>
|
||||
<string name="register">Créer un compte</string>
|
||||
<string name="sign_in_via_webview">Se connecter via WebView</string>
|
||||
<string name="sign_in_first">Connectez-vous pour continuer</string>
|
||||
|
||||
<string name="text_is_empty">Entrez le texte.</string>
|
||||
@@ -58,11 +54,7 @@
|
||||
<string name="error_invalid_number">Nombre invalide</string>
|
||||
|
||||
<string name="app_waring">Le contenu de l\'application provient de l\'Internet, dont quelque chose peut vous causer le dommage physique ou mentale. Vous l\'avez bien compris et voulez continuer quand même.</string>
|
||||
<string name="error_username_cannot_empty">Nom d\'ultilisateur ne doit pas être une chaîne vide</string>
|
||||
<string name="error_password_cannot_empty">Mot de passe ne doit pas être une chaîne vide</string>
|
||||
<string name="guest_mode">Continuer sans se connecter</string>
|
||||
<string name="sign_in_failed">Impossible de se connecter</string>
|
||||
<string name="get_it">Compris</string>
|
||||
|
||||
<!-- Gallery List -->
|
||||
<string name="gallery_list_search_bar_hint_exhentai">Chercher sur ExHentai</string>
|
||||
|
||||
@@ -24,12 +24,8 @@
|
||||
<string name="downloads">ダウンロード</string>
|
||||
<string name="settings">設定</string>
|
||||
|
||||
<string name="username">ユーザー名</string>
|
||||
<string name="password">パスワード</string>
|
||||
|
||||
<string name="sign_in">ログイン</string>
|
||||
<string name="register">登録</string>
|
||||
<string name="sign_in_via_webview">Webでログイン</string>
|
||||
<string name="sign_in_first">ログインしてください</string>
|
||||
|
||||
<string name="text_is_empty">テキストを入力してください</string>
|
||||
@@ -56,11 +52,7 @@
|
||||
<string name="error_invalid_number">無効な数字です</string>
|
||||
|
||||
<string name="app_waring">このアプリの内容はインターネットから取得したものです。その内容の一部は使用者のお体や心理に傷つける恐れがあります。それでも続行しますか?</string>
|
||||
<string name="error_username_cannot_empty">ユーザー名を入力してください。</string>
|
||||
<string name="error_password_cannot_empty">パスワードを入力してください。</string>
|
||||
<string name="guest_mode">ログインをスキップ</string>
|
||||
<string name="sign_in_failed">ログインに失敗しました。</string>
|
||||
<string name="get_it">了解</string>
|
||||
|
||||
<!-- Gallery List -->
|
||||
<string name="gallery_list_search_bar_hint_exhentai">ExHentaiを検索</string>
|
||||
|
||||
@@ -25,12 +25,8 @@
|
||||
<string name="downloads">다운로드</string>
|
||||
<string name="settings">설정</string>
|
||||
|
||||
<string name="username">사용자 이름</string>
|
||||
<string name="password">비밀번호</string>
|
||||
|
||||
<string name="sign_in">로그인</string>
|
||||
<string name="register">회원가입</string>
|
||||
<string name="sign_in_via_webview">WebView를 통하여 로그인</string>
|
||||
<string name="sign_in_first">먼저 로그인하세요.</string>
|
||||
|
||||
<string name="text_is_empty">텍스트가 비어 있습니다.</string>
|
||||
@@ -60,11 +56,7 @@
|
||||
<string name="error_invalid_number">잘못된 번호</string>
|
||||
|
||||
<string name="app_waring">이 앱의 내용은 인터넷에서 받아옵니다. 이 앱을 사용하기 위해서는 받아온 내용 중 일부가 사용자에게 가할 수 있는 신체적 또는 정신적 피해를 감수해야 합니다.</string>
|
||||
<string name="error_username_cannot_empty">사용자 이름은 비워둘 수 없습니다.</string>
|
||||
<string name="error_password_cannot_empty">비밀번호는 비워둘 수 없습니다.</string>
|
||||
<string name="guest_mode">로그인 없이 사용</string>
|
||||
<string name="sign_in_failed">로그인 실패</string>
|
||||
<string name="get_it">알겠습니다</string>
|
||||
|
||||
<!-- Gallery List -->
|
||||
<string name="gallery_list_search_bar_hint_exhentai">ExHentai 검색</string>
|
||||
|
||||
@@ -8,8 +8,6 @@
|
||||
<string name="error_unknown_host">Ukjent vert</string>
|
||||
<string name="error_redirection">For mange videresendinger</string>
|
||||
<string name="error_socket">Nettverksfeil</string>
|
||||
<string name="password">Passord</string>
|
||||
<string name="sign_in_via_webview">Logg inn via WebView</string>
|
||||
<string name="downloads">Nedlastninger</string>
|
||||
<string name="register">Registrering</string>
|
||||
<string name="error_invalid_number">Ugyldig nummer</string>
|
||||
@@ -18,7 +16,6 @@
|
||||
<string name="history">Historikk</string>
|
||||
<string name="subscription">Abonnement</string>
|
||||
<string name="settings">Innstillinger</string>
|
||||
<string name="username">Brukernavn</string>
|
||||
<string name="sign_in">Logg inn</string>
|
||||
<string name="sign_in_first">Logg inn først</string>
|
||||
<string name="download">Last ned</string>
|
||||
@@ -53,7 +50,6 @@
|
||||
<string name="torrents">Torrenter</string>
|
||||
<string name="more_previews">Flere forhåndsvisninger</string>
|
||||
<string name="refresh">Gjenoppfrisk</string>
|
||||
<string name="get_it">Skjønner</string>
|
||||
<string name="keyword_search">Nøkkelordssøk</string>
|
||||
<string name="search_sft">Etiketter</string>
|
||||
<string name="any">Ubegrenset</string>
|
||||
|
||||
@@ -25,12 +25,8 @@
|
||||
<string name="downloads">ดาวน์โหลด</string>
|
||||
<string name="settings">การตั้งค่า</string>
|
||||
|
||||
<string name="username">ชื่อผู้ใช้</string>
|
||||
<string name="password">รหัสผ่าน</string>
|
||||
|
||||
<string name="sign_in">ลงชื่อเข้าใช้</string>
|
||||
<string name="register">ลงทะเบียน</string>
|
||||
<string name="sign_in_via_webview">ลงชื่อเข้าใช้ผ่านมุมมองเว็บไซต์</string>
|
||||
<string name="sign_in_first">โปรดลงชื่อเข้าใช้ก่อนเป็นอันดับแรก</string>
|
||||
|
||||
<string name="text_is_empty">ข้อความห้ามเว้นว่างไว้</string>
|
||||
@@ -60,11 +56,7 @@
|
||||
<string name="error_invalid_number">จำนวนไม่ถูกต้อง</string>
|
||||
|
||||
<string name="app_waring">เนื้อหาภายในแอปพลิเคชั่นนี้มาจากอินเทอร์เน็ตทั้งหมด อาจมีเนื้อหาบางอย่างที่มีผลต่อร่างกายหรือจิตใจของคุณ คุณจะต้องยอมรับความเสี่ยงที่ดังกล่าว และดำเนินการต่อไป</string>
|
||||
<string name="error_username_cannot_empty">ชื่อผู้ใช้ห้ามเว้นว่างไว้</string>
|
||||
<string name="error_password_cannot_empty">รหัสผ่านห้ามเว้นว่างไว้</string>
|
||||
<string name="guest_mode">ดำเนินการต่อโดยไม่ต้องลงชื่อเข้าระบบ</string>
|
||||
<string name="sign_in_failed">การลงชื่อเข้าใช้ล้มเหลว</string>
|
||||
<string name="get_it">เข้าใจแล้ว ไม่ต้องแสดงอีก</string>
|
||||
|
||||
<!-- Gallery List -->
|
||||
<string name="gallery_list_search_bar_hint_exhentai">ค้นหาใน ExHentai</string>
|
||||
|
||||
@@ -8,11 +8,8 @@
|
||||
<string name="history">Geçmiş</string>
|
||||
<string name="downloads">İndirilenler</string>
|
||||
<string name="settings">Ayarlar</string>
|
||||
<string name="username">Kullanıcı adı</string>
|
||||
<string name="password">Şifre</string>
|
||||
<string name="sign_in">Giriş yap</string>
|
||||
<string name="register">Kaydol</string>
|
||||
<string name="sign_in_via_webview">WebView aracılığıyla giriş yap</string>
|
||||
<string name="sign_in_first">Lütfen önce giriş yap</string>
|
||||
<string name="waring">Uyarı</string>
|
||||
<string name="invalid_download_location">İndirme konumu kullanılamıyor. Lütfen Ayarlardan ayarlayın.</string>
|
||||
@@ -33,11 +30,7 @@
|
||||
<string name="error_get_ptoken_error">pToken alınamadı</string>
|
||||
<string name="error_cant_save_image">Görsel kaydedilemiyor</string>
|
||||
<string name="error_invalid_number">Geçersiz numara</string>
|
||||
<string name="error_username_cannot_empty">Kullanıcı adı boş bir metin olamaz</string>
|
||||
<string name="error_password_cannot_empty">Şifre boş bir metin olamaz</string>
|
||||
<string name="guest_mode">Giriş yapmaksızın devam et</string>
|
||||
<string name="sign_in_failed">Giriş başarısız</string>
|
||||
<string name="get_it">Anladım</string>
|
||||
<string name="gallery_list_empty_hit">Dünya büyük olmasına rağmen pandacık yalnız oturuyor</string>
|
||||
<string name="keyword_search">Anahtar Kelime Arama</string>
|
||||
<string name="image_search">Görsel Arama</string>
|
||||
@@ -68,7 +61,6 @@
|
||||
<string name="error_unknown_host">Bilinmeyen host</string>
|
||||
<string name="app_waring">Bu uygulamadaki içerikler internetten alınmaktadır. Bazı içerikler fiziksel veya zihinsel olarak size zararlı gelebilir.Yukarıda, riskleri öğrendiniz ve üstleneceksiniz.
|
||||
\nKullanmaya devam ederek, yukarıdaki koşulları kabul edersiniz.</string>
|
||||
<string name="sign_in_failed_tip">Bu sorun devam ederse, \"WebView aracılığıyla giriş yap\" seçeneğini veya \"Çerez aracılığıyla giriş yap\" seçeneğini deneyin.</string>
|
||||
<string name="gallery_list_search_bar_open_gallery">Galeriyi aç</string>
|
||||
<string name="gallery_list_search_bar_hint_e_hentai">E-Hentai\'de Arayın</string>
|
||||
<string name="gallery_list_empty_hit_subscription">Etiketlere Ayarlar->EH->Etiketlerim yerinden abone olun</string>
|
||||
|
||||
@@ -22,11 +22,8 @@
|
||||
<string name="history">历史</string>
|
||||
<string name="downloads">下载</string>
|
||||
<string name="settings">设置</string>
|
||||
<string name="username">用户名</string>
|
||||
<string name="password">密码</string>
|
||||
<string name="sign_in">登录</string>
|
||||
<string name="register">注册</string>
|
||||
<string name="sign_in_via_webview">通过网页登录</string>
|
||||
<string name="sign_in_first">请先登录</string>
|
||||
<string name="text_is_empty">文本为空</string>
|
||||
<string name="waring">警告</string>
|
||||
@@ -52,12 +49,7 @@
|
||||
<string name="error_invalid_number">非法数字</string>
|
||||
<string name="app_waring">本应用中内容来自互联网,部分内容可能对您的生理及心理造成难以恢复的伤害。本应用作者不会对由本应用造成的任何后果负责。未成年人应在监护人指导下使用本应用。请遵守所在地的法律法规。</string>
|
||||
<string name="app_waring_2">继续使用即代表您同意上述条款。</string>
|
||||
<string name="error_username_cannot_empty">用户名不可为空</string>
|
||||
<string name="error_password_cannot_empty">密码不可为空</string>
|
||||
<string name="guest_mode">游客模式</string>
|
||||
<string name="sign_in_failed">登录失败</string>
|
||||
<string name="sign_in_failed_tip">若持续出错,请尝试“通过网页登录”或“通过 Cookie 登录”。</string>
|
||||
<string name="get_it">知道了</string>
|
||||
<!-- Gallery List -->
|
||||
<string name="gallery_list_search_bar_hint_exhentai">搜索 ExHentai</string>
|
||||
<string name="gallery_list_search_bar_hint_e_hentai">搜索 E-Hentai</string>
|
||||
|
||||
@@ -26,12 +26,8 @@
|
||||
<string name="downloads">下載</string>
|
||||
<string name="settings">設置</string>
|
||||
|
||||
<string name="username">用户名</string>
|
||||
<string name="password">密碼</string>
|
||||
|
||||
<string name="sign_in">登錄</string>
|
||||
<string name="register">註冊</string>
|
||||
<string name="sign_in_via_webview">通過網頁登錄</string>
|
||||
<string name="sign_in_first">請先登錄</string>
|
||||
|
||||
<string name="text_is_empty">文本為空</string>
|
||||
@@ -61,12 +57,7 @@
|
||||
<string name="error_invalid_number">非法數字</string>
|
||||
|
||||
<string name="app_waring">本應用中內容來自互聯網,部分內容可能對您的生理及心理造成難以恢復的傷害。本應用作者不會對由本應用造成的任何後果負責。\n\n未成年人應在監護人指導下使用本應用。</string>
|
||||
<string name="error_username_cannot_empty">用户名不可為空</string>
|
||||
<string name="error_password_cannot_empty">密碼不可為空</string>
|
||||
<string name="guest_mode">跳過登錄</string>
|
||||
<string name="sign_in_failed">登錄失敗</string>
|
||||
<string name="sign_in_failed_tip">若持續出錯,請嘗試“通過網頁登錄”或“通過 Cookie 登錄”。</string>
|
||||
<string name="get_it">知道了</string>
|
||||
|
||||
<!-- Gallery List -->
|
||||
<string name="gallery_list_search_bar_hint_exhentai">搜索 ExHentai</string>
|
||||
|
||||
@@ -22,11 +22,8 @@
|
||||
<string name="history">歷史</string>
|
||||
<string name="downloads">下載</string>
|
||||
<string name="settings">設定</string>
|
||||
<string name="username">使用者名稱</string>
|
||||
<string name="password">密碼</string>
|
||||
<string name="sign_in">登入</string>
|
||||
<string name="register">註冊</string>
|
||||
<string name="sign_in_via_webview">透過網頁登入</string>
|
||||
<string name="sign_in_first">請先登入</string>
|
||||
<string name="text_is_empty">文字是空的</string>
|
||||
<string name="waring">警告</string>
|
||||
@@ -52,12 +49,7 @@
|
||||
<string name="error_invalid_number">無效的數字</string>
|
||||
<string name="app_waring">本應用程式中內容來自網際網路,部分內容可能對您的生理及心理造成難以恢復的傷害。本應用程式的作者不會對由其所造成的任何影響負責。\n\n未成年人應在監護人指導下使用本應用程式。\n\n繼續使用即代表您同意上述條款。</string>
|
||||
<string name="app_waring_2">繼續使用即表示您同意上述條款。</string>
|
||||
<string name="error_username_cannot_empty">使用者名稱欄位不能為空</string>
|
||||
<string name="error_password_cannot_empty">密碼欄位不能為空</string>
|
||||
<string name="guest_mode">略過登入</string>
|
||||
<string name="sign_in_failed">登入失敗</string>
|
||||
<string name="sign_in_failed_tip">若持續出錯,請嘗試“通過網頁登入”或“通過 Cookie 登入”。</string>
|
||||
<string name="get_it">知道了</string>
|
||||
<!-- Gallery List -->
|
||||
<string name="gallery_list_search_bar_hint_exhentai">在 ExHentai 搜尋</string>
|
||||
<string name="gallery_list_search_bar_hint_e_hentai">在 E-Hentai 搜尋</string>
|
||||
|
||||
@@ -36,11 +36,8 @@
|
||||
<string name="history">History</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="username">Username</string>
|
||||
<string name="password">Password</string>
|
||||
<string name="sign_in">Sign in</string>
|
||||
<string name="register">Register</string>
|
||||
<string name="sign_in_via_webview">Sign in via WebView</string>
|
||||
<string name="sign_in_first">Please sign in first</string>
|
||||
<string name="text_is_empty">Text is empty</string>
|
||||
<string name="waring">Warning</string>
|
||||
@@ -90,12 +87,7 @@
|
||||
<string name="error_invalid_number">Invalid number</string>
|
||||
<string name="app_waring">The content of this application is from the Internet. Some of it may do physical or mental harm to you. You have learnt the risks above and would like to undertake them. By continuing to use it, you agree to the above terms.</string>
|
||||
<string name="app_waring_2">By continuing to use it, you agree to the above terms.</string>
|
||||
<string name="error_username_cannot_empty">Username cannot be an empty string</string>
|
||||
<string name="error_password_cannot_empty">Password cannot be an empty string</string>
|
||||
<string name="guest_mode">Continue without signing in</string>
|
||||
<string name="sign_in_failed">Sign in failed</string>
|
||||
<string name="sign_in_failed_tip">If this issue continues, try \"Sign in via WebView\" or \"Sign in via cookies\".</string>
|
||||
<string name="get_it">Got it</string>
|
||||
<!-- Gallery List -->
|
||||
<string name="gallery_list_search_bar_hint_exhentai">Search ExHentai</string>
|
||||
<string name="gallery_list_search_bar_hint_e_hentai">Search E-Hentai</string>
|
||||
|
||||
Reference in new issue
Block a user