Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
**简体中文** | [English](https://github.com/Seyud/device_faker/blob/main/docs/en/README.md)
**简体中文** | [English](https://github.com/Seyud/device_faker/blob/main/docs/en/README.md) | [Türkçe](https://github.com/Seyud/device_faker/blob/main/docs/tr/README.md)

# Device Faker 📱

Expand Down
2 changes: 1 addition & 1 deletion docs/en/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
**English** | [简体中文](https://github.com/Seyud/device_faker/blob/main/docs/README.md)
**English** | [简体中文](https://github.com/Seyud/device_faker/blob/main/docs/README.md) | [Türkçe](https://github.com/Seyud/device_faker/blob/main/docs/tr/README.md)

# Device Faker 📱

Expand Down
68 changes: 68 additions & 0 deletions docs/tr/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
**Türkçe** | [简体中文](https://github.com/Seyud/device_faker/blob/main/docs/README.md) | [English](https://github.com/Seyud/device_faker/blob/main/docs/en/README.md)

# Device Faker 📱

<img src="../logo.png" style="width: 96px;" alt="logo">

Zygisk tabanlı, farklı uygulamalar için farklı cihaz modellerini yapılandırabilen bir cihaz modeli taklit modülü.

[![Version](https://img.shields.io/github/v/release/Seyud/Device_Faker?logo=github)](https://github.com/Seyud/Device_Faker/releases/latest)
[![GitHub Downloads](https://img.shields.io/github/downloads/Seyud/Device_Faker/total?logo=github&logoColor=green)](https://github.com/Seyud/Device_Faker/releases)
[![Language](https://img.shields.io/badge/language-Rust-orange?logo=rust&logoColor=orange)](https://www.rust-lang.org/)
[![Telegram](https://img.shields.io/badge/group-Telegram-2CA5E0?logo=telegram&logoColor=87CEEB)](https://t.me/device_faker)

## Özellikler ✨

* 🎯 **Hassas Kontrol**: Her uygulama için cihaz bilgilerini ayrı ayrı yapılandırın.
* 📁 **Şablon Yönetimi**: Birden fazla cihaz şablonu oluşturun ve bunları kolayca birden fazla paket adına uygulayın.
* 🔄 **Anında Etki**: Yapılandırmayı değiştirdikten sonra yalnızca uygulamayı yeniden başlatmanız yeterlidir, sistemi yeniden başlatmanıza gerek yoktur.
* 🛡️ **Güvenli ve Kararlı**: Zygisk altyapısı üzerine kurulmuştur ve modüler tasarıma sahiptir.
* 📝 **Basit Yapılandırma**: Düzenlemesi kolay TOML formatındaki yapılandırma dosyalarını kullanır.
* ⚡ **Performans Odaklı**: Yalnızca yapılandırılmış uygulamalarda etkili olur, diğer uygulamaları etkilemez.
* 🎭 **Üç Mod Desteği**:
* **Lite Mod**: Hafif ve düşük iz bırakan sahteleştirme.
* **Full Mod**: Kapsamlı cihaz sahteleştirme.
* **Resetprop Modu**: Salt okunur sistem özelliklerini değiştirmeyi destekler.
* 🌐 **WebUI Yönetimi**: Yapılandırmaları kolayca yönetebilmeniz için grafiksel bir web arayüzü sunar.


## WebUI Özellikleri 🖥️

Device Faker modern, web tabanlı bir yönetim arayüzü sunar.

- 📊 **Durum Görüntüleme**: Modülün çalışma durumunu gerçek zamanlı olarak görüntüleme imkanı sunar
- 📋 **Şablon Yönetimi**: Cihaz şablonları oluşturun, düzenleyin ve silin; birden fazla paket adına toplu olarak uygulayın
- 📱 **Uygulama Yönetimi**: Yüklü uygulamalar ve bunların yapılandırma durumuna ilişkin sezgisel bir görünüm
- 🖋️ **Yapılandırma Düzenleme**: Uygulama yapılandırmasını düzenlemek için grafik arayüz; şablon uygulamaları ve özel yapılandırmaları destekler

## Yapılandırma Rehberi ⚙️

Ayrıntılı yapılandırma talimatları için lütfen [Yapılandırma Belgeleri](https://github.com/Seyud/device_faker/blob/main/docs/en/CONFIG.md) bölümüne bakın.

> Bu kısım çok fazla teknik bilgi içerdiğinden dolayı çevirme gereği duymadım, zaten eğer yapılandırma dosyaları ile uğraşıyorsanız ortalama seviyede bir İngilizceye sahipsiniz demektir :)

Yapılandırma dosyası `/data/adb/device_faker/config/config.toml` konumunda bulunur ve TOML biçimini kullanır. Yapılandırmayı değiştirdikten sonra, değişikliklerin yürürlüğe girmesi için ilgili uygulamayı yeniden başlatmanız yeterlidir; sistemi yeniden başlatmanıza gerek yoktur.

## Şablon Yapılandırması Katkıları 🎁

Topluluğun katkıları için teşekkür ediyoruz, siz de depoya katkı sağlayabilirsiniz!

- 📦 [device_faker_config](https://github.com/Seyud/device_faker_config) - Cihaz şablonu yapılandırmalarına katkı sağlayın

Cihaz yapılandırmalarınızı paylaşarak daha fazla kullanıcının cihaz aldatma konusunda daha iyi sonuçlar elde etmesine yardımcı olabilirsiniz! Unutmayın ki her bir yapılandırma dosyası bile önemlidir :)

## Teşekkürler 🙏

Bu proje, geliştirme aşamasında aşağıdaki mükemmel projelerden yararlanmaktadır:

- [zygisk-dump-dex](https://github.com/ri-char/zygisk-dump-dex) - Rust Zygisk modülü geliştirme için prototip referansı sunar
- [zygisk-api-rs](https://github.com/rmnscnce/zygisk-api-rs) - Zygisk API için Rust bağımlılık desteği sağlar
- [MiPushZygisk](https://github.com/wushidia/MiPushZygisk) - Zygisk cihaz aldatma çözümleri için referans sağlar

Bu projelerin geliştiricilerine teşekkürler! 💖

---

**📱 Cihazlar, uygulama model kısıtlamalarıyla sınırlanmasın!** 🚀

> 💝 Bu modül size yardımcı olduysa, destek olmak için lütfen bir ⭐ verin
3 changes: 2 additions & 1 deletion webui/src/pages/SettingsPage.vue
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
<el-option :label="t('settings.display.language.system')" value="system" />
<el-option :label="t('settings.display.language.zh')" value="zh" />
<el-option :label="t('settings.display.language.en')" value="en" />
<el-option :label="t('settings.display.language.tr')" value="tr" />
</el-select>
</div>
</div>
Expand Down Expand Up @@ -194,7 +195,7 @@ function onThemeChange(value: string) {
}

function onLanguageChange(value: string) {
settingsStore.setLanguage(value as 'system' | 'zh' | 'en')
settingsStore.setLanguage(value as 'system' | 'zh' | 'en' | 'tr')
}

async function onModeChange(value: string) {
Expand Down
197 changes: 196 additions & 1 deletion webui/src/pages/StatusPage.vue
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,16 @@
</div>
</div>

<div class="status-item clickable" @click="translatorsDialogVisible = true">
<div class="status-icon gradient-icon-5">
<Languages :size="32" />
</div>
<div class="status-info">
<span class="status-label">{{ t('status.translators.title') }}</span>
<span class="status-value">{{ t('status.translators.action') }}</span>
</div>
</div>

<div class="status-item clickable" @click="followDialogVisible = true">
<div class="status-icon gradient-icon-5">
<HeartHandshake :size="32" />
Expand All @@ -133,6 +143,79 @@
</div>
</div>

<el-dialog
v-model="translatorsDialogVisible"
:title="t('status.translators.dialog_title')"
width="90%"
:close-on-click-modal="false"
:append-to-body="true"
:destroy-on-close="true"
:z-index="2001"
class="translators-dialog"
modal-class="translators-dialog-modal"
>
<div class="translators-dialog-content">
<div class="translators-grid">
<div v-for="(translator, locale) in translators" :key="locale" class="translator-card">
<div class="translator-avatar">
<img :src="translator.pp_url" :alt="translator.full_name" class="avatar-image" />
</div>

<div class="language-field">
{{ translator.locale_name }}
</div>

<div class="translator-info">
<h4 class="translator-name">{{ translator.full_name }}</h4>
<p class="translator-username">@{{ translator.user_name }}</p>

<div v-if="translator.socials" class="translator-socials">
<button
v-if="translator.socials.github"
type="button"
class="social-link github"
:title="`GitHub: ${translator.socials.github}`"
@click="openExternalUrl(`https://github.com/${translator.socials.github}`)"
>
<span class="brand-logo github-logo" aria-hidden="true">
<svg viewBox="0 0 24 24" role="img">
<path :d="siGithub.path" fill="currentColor" />
</svg>
</span>
</button>
<button
v-if="translator.socials.website"
type="button"
class="social-link website"
title="Website"
@click="openExternalUrl(translator.socials.website)"
>
<svg
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<circle cx="12" cy="12" r="10"></circle>
<path d="M2 12h20"></path>
<path
d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"
></path>
</svg>
</button>
</div>
</div>
</div>
</div>
</div>

<template #footer>
<el-button @click="translatorsDialogVisible = false">{{ t('common.cancel') }}</el-button>
</template>
</el-dialog>

<el-dialog
v-model="followDialogVisible"
:title="t('status.follow.dialog_title')"
Expand Down Expand Up @@ -257,6 +340,7 @@ import {
Smartphone,
FileText,
Settings,
Languages,
HeartHandshake,
Package,
UserRound,
Expand All @@ -265,12 +349,17 @@ import {
} from 'lucide-vue-next'
import { siGithub, siQq, siTelegram } from 'simple-icons'
import { useConfigStore } from '../stores/config'
import { useI18n } from '../utils/i18n'
import { projectTranslators, useI18n } from '../utils/i18n'
import { execCommand } from '../utils/ksu'

const configStore = useConfigStore()
const { t } = useI18n()
const followDialogVisible = ref(false)
const translatorsDialogVisible = ref(false)

const translators = computed(() => {
return projectTranslators || {}
})

const qqGroupUrl =
'https://qun.qq.com/universal-share/share?ac=1&authKey=ls4nlfcsF%2Bxp5SPnVsXRgpbeV1axPZb%2FmJCMXms6ZCHjgAwvOyl1LV%2BDNVL1btgL&busi_data=eyJncm91cENvZGUiOiI4NTQxODgyNTIiLCJ0b2tlbiI6IlE1WVVyZTZxUXVjZUtGUUxWSGFmbzkvMEd3UWNRSiszdklTZDhHejU0RDRyT0lWRTFqS3d4UGJSM1ltaXpkS3MiLCJ1aW4iOiIxMTA1NzgzMDMzIn0%3D&data=IbvhTKt9HwCSsCsl_610-rQ8p6H2NgLmxhEKkMcn-BMWPb86jygWBZJfWLQGm7J8LwpVV2yhPafxTMXYGkjRVA&svctype=4&tempid=h5_group_info'
Expand Down Expand Up @@ -308,6 +397,7 @@ async function openExternalUrl(url: string, fallbackUrl: string = url) {
window.open(fallbackUrl, '_blank', 'noopener,noreferrer')
} finally {
followDialogVisible.value = false
translatorsDialogVisible.value = false
}
}

Expand All @@ -318,6 +408,7 @@ async function openCoolapkProfile() {
window.open('https://www.coolapk.com/u/4621247', '_blank', 'noopener,noreferrer')
} finally {
followDialogVisible.value = false
translatorsDialogVisible.value = false
}
}

Expand Down Expand Up @@ -385,6 +476,110 @@ onActivated(() => {
</script>

<style scoped>
.translators-dialog-content {
display: flex;
flex-direction: column;
gap: 1.5rem;
}

.translators-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 1.25rem;
}

.translator-card {
display: flex;
flex-direction: column;
align-items: center;
padding: 1.5rem;
background: var(--background);
border-radius: 1rem;
text-align: center;
transition: all 0.3s ease;
}

.translator-card:hover {
transform: translateY(-4px);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
}

.translator-avatar {
position: relative;
margin-bottom: 0.75rem;
}

.avatar-image {
width: 100px;
height: 100px;
border-radius: 50%;
object-fit: cover;
border: 2px solid var(--primary);
}

.language-field {
display: inline-block;
background: linear-gradient(135deg, #0ea5e9 0%, #38bdf8 100%);
color: white;
font-size: 0.9rem;
font-weight: 700;
padding: 0.5rem 1rem;
border-radius: 999px;
margin-bottom: 0.75rem;
white-space: nowrap;
}

.translator-info {
display: flex;
flex-direction: column;
gap: 0.5rem;
width: 100%;
}

.translator-name {
font-size: 1.1rem;
font-weight: 700;
color: var(--text);
margin: 0;
}

.translator-username {
font-size: 0.85rem;
color: var(--text-secondary);
margin: 0;
}

.translator-socials {
display: flex;
justify-content: center;
gap: 0.75rem;
margin-top: 0.75rem;
}

.social-link {
display: inline-flex;
align-items: center;
justify-content: center;
width: 36px;
height: 36px;
border-radius: 50%;
border: none;
background: rgba(14, 165, 233, 0.12);
color: var(--primary);
cursor: pointer;
transition: all 0.2s ease;
}

.social-link:hover {
background: rgba(14, 165, 233, 0.25);
transform: scale(1.1);
}

.social-link svg {
width: 18px;
height: 18px;
}

.status-page {
display: flex;
flex-direction: column;
Expand Down
4 changes: 2 additions & 2 deletions webui/src/stores/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,9 @@ export const useSettingsStore = defineStore('settings', () => {
}

// 语言设置
const language = ref<'system' | 'zh' | 'en'>('system')
const language = ref<'system' | 'zh' | 'en' | 'tr'>('system')

function setLanguage(newLanguage: 'system' | 'zh' | 'en') {
function setLanguage(newLanguage: 'system' | 'zh' | 'en' | 'tr') {
settings.value.language = newLanguage
language.value = newLanguage
saveSettings()
Expand Down
2 changes: 1 addition & 1 deletion webui/src/types/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ export interface InstalledApp {
// 设置接口
export interface Settings {
theme: 'system' | 'light' | 'dark'
language: 'system' | 'zh' | 'en'
language: 'system' | 'zh' | 'en' | 'tr'
showSystemApps: boolean
onlineTemplateSource: OnlineTemplateSource
}
Loading