Skip to content
Closed
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
24 changes: 24 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,17 @@ sudo ./scripts/download-content.sh

**7. Use it.** Join the Wi-Fi network you created and open **http://box.lan/home**.

### Turkish survival guide

Most of the medical and survival content on the box is in English, and Kiwix has no Turkish medical or survival ZIM. So the homepage ships a small Turkish guide at **http://box.lan/home/rehber/** (about 110 KB, no download needed):

- first aid, water and food, shelter/heating/fire, other disasters (flood, tsunami, wildfire, chemical, etc.), hygiene and psychological first aid, navigation and signalling,
- a Turkish-English glossary of 350+ terms. The homepage search uses it: pick an English book, type in Turkish ("yanık"), and it searches in English ("burn"),
- "read more" links that open the matching article in the Turkish Wikipedia or the English books on the box,
- a short how-to for setting up offline translation on Android and iPhone in advance.

The text is written from scratch (no copied text) based on public guidance from ERC 2021, IFRC 2020, WHO, Sphere, AFAD, CDC, EPA, FEMA and USDA, with the source under each section. **It has not yet been reviewed by a health professional**; each page says so.

### Optional: internet over a USB Wi-Fi adapter

The Pi's built-in Wi-Fi is dedicated to the hotspot. If the Pi needs internet temporarily (updates, new content) and there is no Ethernet cable, add a cheap USB Wi-Fi adapter as a second card. Adapters with the MediaTek MT7601U chip work out of the box.
Expand Down Expand Up @@ -122,6 +133,7 @@ config/iiab-overrides.yml Internet-in-a-Box settings
config/content.conf list of content to download
www/home/index.html homepage
www/home/acil.html emergency page (Turkish, sourced from AFAD and EPA)
www/home/rehber/ Turkish survival guide and Turkish-English glossary
```

### Troubleshooting
Expand Down Expand Up @@ -221,6 +233,17 @@ sudo ./scripts/download-content.sh

**7. Kullan.** Oluşturduğun Wi-Fi ağına bağlan ve **http://box.lan/home** adresini aç.

### Türkçe hayatta kalma rehberi

Kutudaki tıp ve hayatta kalma içeriğinin çoğu İngilizce ve Kiwix'te Türkçe tıp ya da hayatta kalma ZIM'i yok. Bu yüzden ana sayfayla birlikte **http://box.lan/home/rehber/** adresinde küçük bir Türkçe rehber gelir (yaklaşık 110 KB, ayrıca indirme gerekmez):

- ilk yardım, su ve gıda, barınma/ısınma/yangın, diğer afetler (sel, tsunami, orman yangını, kimyasal sızıntı vb.), hijyen ve psikolojik ilk yardım, yön bulma ve işaretleşme,
- 350'den fazla terimlik Türkçe-İngilizce sözlük. Ana sayfadaki arama bunu kullanır: İngilizce bir kitap seçip Türkçe yazarsan ("yanık") İngilizcesiyle ("burn") arar,
- ilgili konuyu kutudaki Türkçe Vikipedi'de ya da İngilizce kitaplarda açan "daha fazla oku" bağlantıları,
- Android ve iPhone'da çevrimdışı çevirinin önceden nasıl kurulacağını anlatan kısa bir bölüm.

Metinler hiçbir yerden kopyalanmadan; ERC 2021, IFRC 2020, DSÖ, Sphere, AFAD, CDC, EPA, FEMA ve USDA'nın herkese açık önerilerine dayanarak özgün olarak yazıldı, her bölümün altında kaynağı var. **Henüz bir sağlık profesyoneli tarafından kontrol edilmedi**; her sayfada bu yazıyor.

### İsteğe bağlı: USB Wi-Fi adaptörüyle internet

Pi'nin dahili Wi-Fi kartı sadece hotspot için kullanılıyor. Pi'nin geçici olarak internete çıkması gerekirse (güncelleme, yeni içerik) ve Ethernet kablosu yoksa ikinci kart olarak ucuz bir USB Wi-Fi adaptörü tak. MediaTek MT7601U yongalı adaptörler kurulumsuz çalışıyor.
Expand Down Expand Up @@ -260,6 +283,7 @@ config/iiab-overrides.yml Internet-in-a-Box ayarları
config/content.conf indirilecek içerik listesi
www/home/index.html ana sayfa
www/home/acil.html acil durum sayfası (AFAD ve EPA kaynaklı)
www/home/rehber/ Türkçe hayatta kalma rehberi ve Türkçe-İngilizce sözlük
```

### Sorun giderme
Expand Down
4 changes: 4 additions & 0 deletions scripts/install-homepage.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,9 @@ if [ -f "$DST/index.html" ] && [ ! -f "$DST/index.html.iiab-original" ]; then
cp "$DST/index.html" "$DST/index.html.iiab-original"
fi
cp "$SRC/index.html" "$SRC/acil.html" "$DST/"
# Türkçe hayatta kalma rehberi / Turkish survival guide
mkdir -p "$DST/rehber"
cp "$SRC"/rehber/* "$DST/rehber/"
echo "Ana sayfa kuruldu / homepage installed: http://box.lan/home"
echo "Türkçe rehber / Turkish guide: http://box.lan/home/rehber/"
echo "Geri almak için / to restore: sudo cp $DST/index.html.iiab-original $DST/index.html"
4 changes: 2 additions & 2 deletions www/home/acil.html
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,8 @@

<table class="forumline">
<tr><td class="cat">Daha fazlası</td></tr>
<tr><td class="row1">İlk yardım, su arıtma ve barınma için ayrıntılı kaynaklar <a href="/home">ana sayfadaki</a>
“Sağlık ve İlk Yardım” ve “Hayatta Kalma ve Hazırlık” bölümlerinde. Bu sayfa resmi kaynakların özetidir; sağlık ekiplerinin ve yetkililerin
<tr><td class="row1">İlk yardım, su arıtma, barınma ve diğer afetler için Türkçe ayrıntılı bilgi <a href="/home/rehber/">Türkçe Hayatta Kalma Rehberi</a>'nde.
İngilizce kaynaklar <a href="/home">ana sayfadaki</a> “Sağlık ve İlk Yardım” ve “Hayatta Kalma ve Hazırlık” bölümlerinde. Bu sayfa resmi kaynakların özetidir; sağlık ekiplerinin ve yetkililerin
talimatları her zaman önceliklidir.</td></tr>
</table>

Expand Down
66 changes: 61 additions & 5 deletions www/home/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,11 @@
.legend .fold{margin-top:0;transform:scale(.8)}

#disk td{color:#B00000;font-weight:bold;font-size:12px}
/* İngilizce kaynak etiketi ve Türkçe→İngilizce arama ipucu / English badge and search hint */
.en{display:inline-block;font-size:9px;font-weight:bold;color:#fff;background:#7F8C99;border-radius:2px;padding:0 3px;margin-left:5px;vertical-align:1px}
#ceviri{margin-top:4px;color:#444}
#ceviri:empty{display:none}
#ceviri a{font-weight:bold;cursor:pointer}
.copy{text-align:center;font-size:10px;color:#444;margin:12px 0 4px;line-height:1.6}

@media (max-width:640px){ .hide-s{display:none} .logo{font-size:22px} }
Expand All @@ -84,6 +89,7 @@
.search input[type=text],.search select,.btn{font-size:16px;padding:6px}
.search input[type=text]{width:100%;box-sizing:border-box;margin:4px 0}
.copy{font-size:12px}
.en{font-size:11px}
}
</style>
</head>
Expand All @@ -96,7 +102,7 @@
<div class="slogan">Çevrimdışı bilgi arşivi &mdash; internet olmasa da açık</div>
</div>
<div class="navlinks">
<a href="/home/acil.html" class="acil">Acil Durum</a><a href="/kiwix/">Kütüphane</a><a href="/maps">Haritalar</a><a href="/admin">Yönetim</a>
<a href="/home/acil.html" class="acil">Acil Durum</a><a href="/home/rehber/">Türkçe Rehber</a><a href="/kiwix/">Kütüphane</a><a href="/maps">Haritalar</a><a href="/admin">Yönetim</a>
</div>
</div>

Expand All @@ -107,6 +113,7 @@
<select id="book"></select>
<input type="submit" class="btn" value="Git">
</form>
<div id="ceviri" class="small"></div>
</td></tr></table>

<div class="crumb"><a href="/home">HAS_PrepperDisk Ana Sayfa</a></div>
Expand Down Expand Up @@ -148,6 +155,15 @@
url: zim olmayan servisler için sabit adres.
Cihazda bulunamayan ZIM'ler gri klasörle "henüz yüklenmedi" görünür. */
const CATS = [
{ title:"Türkçe Hayatta Kalma Rehberi", items:[
{ name:"İlk Yardım", desc:"Kalp masajı, kanama ve turnike, ezilme sendromu, kırık, yanık, donma, zehirlenme.", lang:"TR", size:"—", url:"/home/rehber/ilk-yardim.html" },
{ name:"Su ve Gıda", desc:"Su bulma ve arıtma, elektrik kesintisinde yiyecekler, bebek beslenmesi.", lang:"TR", size:"—", url:"/home/rehber/su-ve-gida.html" },
{ name:"Barınma, Isınma ve Yangın", desc:"Çadır, sıcak kalmak, karbonmonoksit, ateş yakma ve yangın söndürme.", lang:"TR", size:"—", url:"/home/rehber/barinma.html" },
{ name:"Afetler", desc:"Sel, tsunami, orman yangını, heyelan, fırtına, kar, kimyasal sızıntı, tahliye.", lang:"TR", size:"—", url:"/home/rehber/afetler.html" },
{ name:"Hijyen, Salgın ve Moral", desc:"Acil tuvalet, el yıkama, salgın belirtileri, psikolojik ilk yardım, çocuklar.", lang:"TR", size:"—", url:"/home/rehber/hijyen.html" },
{ name:"Yön Bulma ve İşaretleşme", desc:"Yardım işaretleri, pusulasız yön bulma, radyo, telsiz ve telefon.", lang:"TR", size:"—", url:"/home/rehber/yon-ve-isaret.html" },
{ name:"Türkçe-İngilizce Sözlük", desc:"İngilizce kitaplarda aramak için tıp ve hayatta kalma terimleri.", lang:"TR", size:"—", url:"/home/rehber/sozluk.html" },
]},
{ title:"Ansiklopedi", items:[
{ name:"Vikipedi (Türkçe)", desc:"Türkçe Vikipedi'nin resimli tam kopyası.", lang:"TR", size:"~9 GB", zim:"wikipedia_tr_all_maxi", search:true },
{ name:"Wikipedia (English)", desc:"Tüm İngilizce Wikipedia, resimleriyle birlikte.", lang:"EN", size:"~120 GB", zim:"wikipedia_en_all_maxi", search:true },
Expand Down Expand Up @@ -232,13 +248,18 @@
url = b.href;
const v = b.id.match(/(\d{4})-(\d{2})[a-z]?$/);
status = v ? `${v[2]}/${v[1]} sürümü` : "Kurulu";
if (i.search) sel.add(new Option(i.name, b.id));
if (i.search) {
const o = new Option(i.name + (i.lang === "EN" ? " (İngilizce)" : ""), b.id);
o.dataset.lang = i.lang;
sel.add(o);
}
}
}
}
if (url) ready++;
const icon = !url ? "fold gray" : "fold";
const name = url ? `<a href="${esc(url)}" class="fname">${esc(i.name)}</a>` : `<span class="fname">${esc(i.name)}</span>`;
const en = i.lang === "EN" ? `<span class="en" title="İngilizce kaynak">İNGİLİZCE</span>` : "";
const name = (url ? `<a href="${esc(url)}" class="fname">${esc(i.name)}</a>` : `<span class="fname">${esc(i.name)}</span>`) + en;
html += `<tr class="${url ? "" : "off"}">
<td class="row1 c" width="40"><i class="${icon}"></i></td>
<td class="row1">${name}<div class="fdesc">${esc(i.desc)}</div></td>
Expand All @@ -264,8 +285,40 @@
if (!sel.options.length) sel.add(new Option("Tüm kütüphane", ""));
document.getElementById("stats").innerHTML =
`Toplam <b>${total}</b> kaynak var, bunlardan <b>${ready}</b> tanesi kullanıma hazır.<br>
Bu sayfa internet bağlantısı olmadan çalışır.`;
Bu sayfa internet bağlantısı olmadan çalışır. İngilizce kaynakları okumak için:
<a href="/home/rehber/#ingilizce">Türkçe Rehber &raquo; İngilizce kaynakları nasıl okurum?</a>`;
ipucu();
}

/* Türkçe → İngilizce arama köprüsü. İngilizce bir kitap seçiliyken Türkçe yazılan arama,
/home/rehber/sozluk.js sözlüğüyle İngilizceye çevrilip öyle aranır.
Turkish → English search bridge: a Turkish query in an English book is searched in English. */
let secilen = null; // kullanıcının seçtiği eş anlamlı karşılık / alternative the user picked
function ceviri(){
const sel = document.getElementById("book");
const o = sel.options[sel.selectedIndex];
const q = document.getElementById("q").value.trim();
if (!o || o.dataset.lang !== "EN" || !q || typeof window.sozlukCevir !== "function") return null;
return window.sozlukCevir(q);
}
function ipucu(){
const box = document.getElementById("ceviri");
const c = ceviri();
if (!c || !c.en) { box.textContent = ""; secilen = null; return; }
if (!c.alts.includes(secilen)) secilen = null;
const en = secilen || c.en;
let h = `Bu kitap İngilizce. <b>“${esc(en)}”</b> olarak aranacak.`;
const diger = c.alts.filter(a => a !== en);
if (diger.length) h += " Başka anlam: " + diger.map(a => `<a data-alt="${esc(a)}">${esc(a)}</a>`).join(", ");
if (c.kalan && c.kalan.length) h += ` <span>(çevrilemeyen: ${esc(c.kalan.join(" "))})</span>`;
box.innerHTML = h;
}
document.getElementById("ceviri").addEventListener("click", e => {
const a = e.target.closest("a[data-alt]");
if (a) { secilen = a.dataset.alt; ipucu(); }
});
document.getElementById("q").addEventListener("input", () => { secilen = null; ipucu(); });
document.getElementById("book").addEventListener("change", ipucu);

/* Saat, telefonun değil Pi'nin saatidir: HTTP yanıtının Date başlığından okunur. */
fetch(location.href, {method:"HEAD", cache:"no-store"}).then(r => {
Expand All @@ -277,9 +330,11 @@

document.getElementById("search").addEventListener("submit", e => {
e.preventDefault();
const q = document.getElementById("q").value.trim();
let q = document.getElementById("q").value.trim();
const book = document.getElementById("book").value;
if (!q) return;
const c = ceviri();
if (c && c.en) q = secilen || c.en;
location.href = book
? `/kiwix/search?books.name=${encodeURIComponent(book)}&pattern=${encodeURIComponent(q)}`
: `/kiwix/search?pattern=${encodeURIComponent(q)}`;
Expand All @@ -294,5 +349,6 @@

loadBooks().then(render);
</script>
<script src="/home/rehber/sozluk.js" defer></script>
</body>
</html>
Loading