mirror of
https://github.com/wahyd4/links.git
synced 2026-08-08 21:04:53 +10:00
Update UI
This commit is contained in:
+1
-1
@@ -145,7 +145,7 @@ MUSIC_ROOT = os.path.join(BASE_DIR, 'data', 'music')
|
|||||||
# File uploads folder — override via FILE_UPLOADS_FOLDER env var.
|
# File uploads folder — override via FILE_UPLOADS_FOLDER env var.
|
||||||
# Defaults to ~/Downloads locally; set to /uploads on k8s.
|
# Defaults to ~/Downloads locally; set to /uploads on k8s.
|
||||||
FILE_UPLOADS_FOLDER = os.environ.get('FILE_UPLOADS_FOLDER', os.path.expanduser('~/Downloads'))
|
FILE_UPLOADS_FOLDER = os.environ.get('FILE_UPLOADS_FOLDER', os.path.expanduser('~/Downloads'))
|
||||||
IMAGES_FOLDER = os.environ.get('IMAGES_FOLDER', os.path.expanduser('~/Pictures'))
|
IMAGES_FOLDER = os.environ.get('IMAGES_FOLDER', os.path.expanduser('~/Downloads'))
|
||||||
|
|
||||||
|
|
||||||
LOGGING = {
|
LOGGING = {
|
||||||
|
|||||||
@@ -56,7 +56,7 @@
|
|||||||
opacity: 1 !important;
|
opacity: 1 !important;
|
||||||
transform: none !important;
|
transform: none !important;
|
||||||
}
|
}
|
||||||
.app-tile, .post-card, .fan-card, .fan-card img, .fan-card-frame { transition: none !important; animation: none !important; }
|
.app-tile, .post-card, .fan-card, .fan-card img, .fan-card-frame, .fan-lightbox { transition: none !important; animation: none !important; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------- Hero ---------- */
|
/* ---------- Hero ---------- */
|
||||||
@@ -395,6 +395,35 @@
|
|||||||
.fan-actions { gap: 0.8rem; }
|
.fan-actions { gap: 0.8rem; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ---------- Fan lightbox (full-size preview on card click) ---------- */
|
||||||
|
.fan-lightbox {
|
||||||
|
position: fixed; inset: 0; z-index: 1000;
|
||||||
|
display: flex; align-items: center; justify-content: center;
|
||||||
|
padding: 2rem;
|
||||||
|
background: rgba(0, 0, 0, 0.82);
|
||||||
|
-webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px);
|
||||||
|
animation: fan-lightbox-fade 0.25s ease;
|
||||||
|
cursor: zoom-out;
|
||||||
|
}
|
||||||
|
.fan-lightbox[hidden] { display: none; }
|
||||||
|
@keyframes fan-lightbox-fade { from { opacity: 0; } to { opacity: 1; } }
|
||||||
|
.fan-lightbox-img {
|
||||||
|
max-width: min(92vw, 900px); max-height: 88vh;
|
||||||
|
display: block; object-fit: contain; cursor: default;
|
||||||
|
border-radius: 14px;
|
||||||
|
background: #e8e8ed;
|
||||||
|
box-shadow: 0 30px 80px rgba(0, 0, 0, 0.45);
|
||||||
|
}
|
||||||
|
.fan-lightbox-close {
|
||||||
|
position: absolute; top: 1.1rem; right: 1.1rem;
|
||||||
|
width: 2.5rem; height: 2.5rem; border-radius: 50%; border: none;
|
||||||
|
display: flex; align-items: center; justify-content: center;
|
||||||
|
background: rgba(255, 255, 255, 0.14); color: #fff; cursor: pointer;
|
||||||
|
transition: background 0.2s ease;
|
||||||
|
}
|
||||||
|
.fan-lightbox-close:hover, .fan-lightbox-close:focus-visible { background: rgba(255, 255, 255, 0.28); }
|
||||||
|
.fan-lightbox-close svg { width: 1.2rem; height: 1.2rem; }
|
||||||
|
|
||||||
/* ---------- Accessibility: visible keyboard focus ---------- */
|
/* ---------- Accessibility: visible keyboard focus ---------- */
|
||||||
a:focus-visible, button:focus-visible {
|
a:focus-visible, button:focus-visible {
|
||||||
outline: 2px solid var(--apple-blue);
|
outline: 2px solid var(--apple-blue);
|
||||||
@@ -520,52 +549,52 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="photo-fan">
|
<div class="photo-fan">
|
||||||
<button type="button" class="fan-card" style="--r: -13deg; --fy: 18px; --z: 1; --d: 0; --tape: rgba(0, 113, 227, 0.22); --tape-r: -4deg;" onclick="refreshRandomImage(this.querySelector('img'))" aria-label="{% trans 'Shuffle image' %}">
|
<button type="button" class="fan-card" style="--r: -13deg; --fy: 18px; --z: 1; --d: 0; --tape: rgba(0, 113, 227, 0.22); --tape-r: -4deg;" onclick="openFanLightbox(this.querySelector('img'))" aria-label="{% trans 'View Full Size' %}">
|
||||||
<span class="fan-card-frame">
|
<span class="fan-card-frame">
|
||||||
<img src="/api/images/random/600/800/?fit=crop&v={{ timestamp }}&box=fan1" data-box="fan1" alt="{% trans 'Random Image' %}" loading="lazy" onerror="handleRandomImageError(this)">
|
<img src="/api/images/random/600/800/?fit=crop&v={{ timestamp }}&box=fan1" data-box="fan1" alt="{% trans 'Random Image' %}" loading="lazy" onerror="handleRandomImageError(this)">
|
||||||
<span class="fan-card-hint" aria-hidden="true">
|
<span class="fan-card-hint" aria-hidden="true">
|
||||||
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="2">
|
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="2">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
|
<path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-4.35-4.35M11 19a8 8 0 100-16 8 8 0 000 16zM11 8v6M8 11h6"/>
|
||||||
</svg>
|
</svg>
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
<button type="button" class="fan-card" style="--r: -6.5deg; --fy: 7px; --z: 2; --d: 1; --tape: rgba(255, 55, 95, 0.20); --tape-r: 3deg;" onclick="refreshRandomImage(this.querySelector('img'))" aria-label="{% trans 'Shuffle image' %}">
|
<button type="button" class="fan-card" style="--r: -6.5deg; --fy: 7px; --z: 2; --d: 1; --tape: rgba(255, 55, 95, 0.20); --tape-r: 3deg;" onclick="openFanLightbox(this.querySelector('img'))" aria-label="{% trans 'View Full Size' %}">
|
||||||
<span class="fan-card-frame">
|
<span class="fan-card-frame">
|
||||||
<img src="/api/images/random/600/800/?fit=crop&v={{ timestamp }}&box=fan2" data-box="fan2" alt="{% trans 'Random Image' %}" loading="lazy" onerror="handleRandomImageError(this)">
|
<img src="/api/images/random/600/800/?fit=crop&v={{ timestamp }}&box=fan2" data-box="fan2" alt="{% trans 'Random Image' %}" loading="lazy" onerror="handleRandomImageError(this)">
|
||||||
<span class="fan-card-hint" aria-hidden="true">
|
<span class="fan-card-hint" aria-hidden="true">
|
||||||
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="2">
|
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="2">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
|
<path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-4.35-4.35M11 19a8 8 0 100-16 8 8 0 000 16zM11 8v6M8 11h6"/>
|
||||||
</svg>
|
</svg>
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
<button type="button" class="fan-card" style="--r: 0deg; --fy: 0px; --z: 3; --d: 2; --tape: rgba(48, 209, 88, 0.22); --tape-r: -2deg;" onclick="refreshRandomImage(this.querySelector('img'))" aria-label="{% trans 'Shuffle image' %}">
|
<button type="button" class="fan-card" style="--r: 0deg; --fy: 0px; --z: 3; --d: 2; --tape: rgba(48, 209, 88, 0.22); --tape-r: -2deg;" onclick="openFanLightbox(this.querySelector('img'))" aria-label="{% trans 'View Full Size' %}">
|
||||||
<span class="fan-card-frame">
|
<span class="fan-card-frame">
|
||||||
<img src="/api/images/random/600/800/?fit=crop&v={{ timestamp }}&box=fan3" data-box="fan3" alt="{% trans 'Random Image' %}" loading="lazy" onerror="handleRandomImageError(this)">
|
<img src="/api/images/random/600/800/?fit=crop&v={{ timestamp }}&box=fan3" data-box="fan3" alt="{% trans 'Random Image' %}" loading="lazy" onerror="handleRandomImageError(this)">
|
||||||
<span class="fan-card-hint" aria-hidden="true">
|
<span class="fan-card-hint" aria-hidden="true">
|
||||||
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="2">
|
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="2">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
|
<path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-4.35-4.35M11 19a8 8 0 100-16 8 8 0 000 16zM11 8v6M8 11h6"/>
|
||||||
</svg>
|
</svg>
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
<button type="button" class="fan-card" style="--r: 6.5deg; --fy: 7px; --z: 2; --d: 3; --tape: rgba(255, 159, 10, 0.22); --tape-r: 4deg;" onclick="refreshRandomImage(this.querySelector('img'))" aria-label="{% trans 'Shuffle image' %}">
|
<button type="button" class="fan-card" style="--r: 6.5deg; --fy: 7px; --z: 2; --d: 3; --tape: rgba(255, 159, 10, 0.22); --tape-r: 4deg;" onclick="openFanLightbox(this.querySelector('img'))" aria-label="{% trans 'View Full Size' %}">
|
||||||
<span class="fan-card-frame">
|
<span class="fan-card-frame">
|
||||||
<img src="/api/images/random/600/800/?fit=crop&v={{ timestamp }}&box=fan4" data-box="fan4" alt="{% trans 'Random Image' %}" loading="lazy" onerror="handleRandomImageError(this)">
|
<img src="/api/images/random/600/800/?fit=crop&v={{ timestamp }}&box=fan4" data-box="fan4" alt="{% trans 'Random Image' %}" loading="lazy" onerror="handleRandomImageError(this)">
|
||||||
<span class="fan-card-hint" aria-hidden="true">
|
<span class="fan-card-hint" aria-hidden="true">
|
||||||
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="2">
|
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="2">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
|
<path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-4.35-4.35M11 19a8 8 0 100-16 8 8 0 000 16zM11 8v6M8 11h6"/>
|
||||||
</svg>
|
</svg>
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
<button type="button" class="fan-card" style="--r: 13deg; --fy: 18px; --z: 1; --d: 4; --tape: rgba(191, 90, 242, 0.22); --tape-r: -3deg;" onclick="refreshRandomImage(this.querySelector('img'))" aria-label="{% trans 'Shuffle image' %}">
|
<button type="button" class="fan-card" style="--r: 13deg; --fy: 18px; --z: 1; --d: 4; --tape: rgba(191, 90, 242, 0.22); --tape-r: -3deg;" onclick="openFanLightbox(this.querySelector('img'))" aria-label="{% trans 'View Full Size' %}">
|
||||||
<span class="fan-card-frame">
|
<span class="fan-card-frame">
|
||||||
<img src="/api/images/random/600/800/?fit=crop&v={{ timestamp }}&box=fan5" data-box="fan5" alt="{% trans 'Random Image' %}" loading="lazy" onerror="handleRandomImageError(this)">
|
<img src="/api/images/random/600/800/?fit=crop&v={{ timestamp }}&box=fan5" data-box="fan5" alt="{% trans 'Random Image' %}" loading="lazy" onerror="handleRandomImageError(this)">
|
||||||
<span class="fan-card-hint" aria-hidden="true">
|
<span class="fan-card-hint" aria-hidden="true">
|
||||||
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="2">
|
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="2">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
|
<path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-4.35-4.35M11 19a8 8 0 100-16 8 8 0 000 16zM11 8v6M8 11h6"/>
|
||||||
</svg>
|
</svg>
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
@@ -573,6 +602,16 @@
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
<!-- ============ Fan Lightbox (full-size preview) ============ -->
|
||||||
|
<div id="fan-lightbox" class="fan-lightbox" hidden role="dialog" aria-modal="true" aria-label="{% trans 'Random Image' %}">
|
||||||
|
<button type="button" class="fan-lightbox-close" id="fan-lightbox-close" aria-label="{% trans 'Close' %}">
|
||||||
|
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="2.5" aria-hidden="true">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
<img id="fan-lightbox-img" class="fan-lightbox-img" src="" alt="{% trans 'Random Image' %}">
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- ============ Link Library ============ -->
|
<!-- ============ Link Library ============ -->
|
||||||
<section class="apple-card home-section" aria-labelledby="links-heading">
|
<section class="apple-card home-section" aria-labelledby="links-heading">
|
||||||
<div class="library-header">
|
<div class="library-header">
|
||||||
@@ -776,6 +815,38 @@
|
|||||||
card.addEventListener('animationend', () => { card.style.animation = 'none'; }, { once: true });
|
card.addEventListener('animationend', () => { card.style.animation = 'none'; }, { once: true });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/* ---------- Photo fan: lightbox (click a card to view it full-size) ---------- */
|
||||||
|
const fanLightbox = document.getElementById('fan-lightbox');
|
||||||
|
const fanLightboxImg = document.getElementById('fan-lightbox-img');
|
||||||
|
const fanLightboxClose = document.getElementById('fan-lightbox-close');
|
||||||
|
|
||||||
|
window.openFanLightbox = function (img) {
|
||||||
|
if (!img || !fanLightbox || !fanLightboxImg) return;
|
||||||
|
fanLightboxImg.src = img.currentSrc || img.src;
|
||||||
|
fanLightboxImg.alt = img.alt;
|
||||||
|
fanLightbox.hidden = false;
|
||||||
|
document.body.style.overflow = 'hidden';
|
||||||
|
fanLightboxClose.focus();
|
||||||
|
};
|
||||||
|
|
||||||
|
function closeFanLightbox() {
|
||||||
|
if (!fanLightbox) return;
|
||||||
|
fanLightbox.hidden = true;
|
||||||
|
fanLightboxImg.src = '';
|
||||||
|
document.body.style.overflow = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fanLightbox) {
|
||||||
|
fanLightboxClose.addEventListener('click', closeFanLightbox);
|
||||||
|
// Click the dimmed backdrop (not the image itself) to dismiss.
|
||||||
|
fanLightbox.addEventListener('click', function (event) {
|
||||||
|
if (event.target === fanLightbox) closeFanLightbox();
|
||||||
|
});
|
||||||
|
document.addEventListener('keydown', function (event) {
|
||||||
|
if (event.key === 'Escape' && !fanLightbox.hidden) closeFanLightbox();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/* ---------- Scroll-reveal animations (respects reduced motion) ---------- */
|
/* ---------- Scroll-reveal animations (respects reduced motion) ---------- */
|
||||||
const revealEls = document.querySelectorAll('.reveal');
|
const revealEls = document.querySelectorAll('.reveal');
|
||||||
const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
||||||
|
|||||||
Binary file not shown.
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-07-19 21:30+1000\n"
|
"POT-Creation-Date: 2026-07-19 22:00+1000\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@@ -481,6 +481,11 @@ msgid "Slideshow"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links/templates/links/collection_detail.html:254
|
#: links/templates/links/collection_detail.html:254
|
||||||
|
#: links/templates/links/link_list.html:552
|
||||||
|
#: links/templates/links/link_list.html:562
|
||||||
|
#: links/templates/links/link_list.html:572
|
||||||
|
#: links/templates/links/link_list.html:582
|
||||||
|
#: links/templates/links/link_list.html:592
|
||||||
msgid "View Full Size"
|
msgid "View Full Size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -659,7 +664,7 @@ msgid "All Files"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links/templates/links/files/list.html:109
|
#: links/templates/links/files/list.html:109
|
||||||
#: links/templates/links/link_list.html:623
|
#: links/templates/links/link_list.html:662
|
||||||
msgid "Type"
|
msgid "Type"
|
||||||
msgstr "链接类型"
|
msgstr "链接类型"
|
||||||
|
|
||||||
@@ -731,7 +736,7 @@ msgstr "导出数据库"
|
|||||||
|
|
||||||
#: links/templates/links/files/list.html:233
|
#: links/templates/links/files/list.html:233
|
||||||
#: links/templates/links/files/list.html:343
|
#: links/templates/links/files/list.html:343
|
||||||
#: links/templates/links/jobs.html:507
|
#: links/templates/links/jobs.html:507 links/templates/links/link_list.html:607
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -868,7 +873,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links/templates/links/jobs.html:152
|
#: links/templates/links/jobs.html:152
|
||||||
#: links/templates/links/link_list.html:1007
|
#: links/templates/links/link_list.html:1078
|
||||||
msgid "selected"
|
msgid "selected"
|
||||||
msgstr "已选择"
|
msgstr "已选择"
|
||||||
|
|
||||||
@@ -1025,13 +1030,13 @@ msgstr "链接详情"
|
|||||||
|
|
||||||
#: links/templates/links/link_confirm_delete.html:17
|
#: links/templates/links/link_confirm_delete.html:17
|
||||||
#: links/templates/links/link_detail.html:43
|
#: links/templates/links/link_detail.html:43
|
||||||
#: links/templates/links/link_list.html:613
|
#: links/templates/links/link_list.html:652
|
||||||
msgid "Alias"
|
msgid "Alias"
|
||||||
msgstr "别名"
|
msgstr "别名"
|
||||||
|
|
||||||
#: links/templates/links/link_confirm_delete.html:18
|
#: links/templates/links/link_confirm_delete.html:18
|
||||||
#: links/templates/links/link_detail.html:60
|
#: links/templates/links/link_detail.html:60
|
||||||
#: links/templates/links/link_list.html:633
|
#: links/templates/links/link_list.html:672
|
||||||
msgid "Original URL"
|
msgid "Original URL"
|
||||||
msgstr "原始URL"
|
msgstr "原始URL"
|
||||||
|
|
||||||
@@ -1097,7 +1102,7 @@ msgid "No changes recorded."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links/templates/links/link_detail.html:256
|
#: links/templates/links/link_detail.html:256
|
||||||
#: links/templates/links/link_list.html:643
|
#: links/templates/links/link_list.html:682
|
||||||
msgid "Clicks"
|
msgid "Clicks"
|
||||||
msgstr "点击次数"
|
msgstr "点击次数"
|
||||||
|
|
||||||
@@ -1106,7 +1111,7 @@ msgid "Edit Link"
|
|||||||
msgstr "编辑链接"
|
msgstr "编辑链接"
|
||||||
|
|
||||||
#: links/templates/links/link_form.html:33
|
#: links/templates/links/link_form.html:33
|
||||||
#: links/templates/links/link_list.html:597
|
#: links/templates/links/link_list.html:636
|
||||||
msgid "New Link"
|
msgid "New Link"
|
||||||
msgstr "创建新链接"
|
msgstr "创建新链接"
|
||||||
|
|
||||||
@@ -1139,136 +1144,130 @@ msgstr ""
|
|||||||
msgid "Alias cannot be changed after creation."
|
msgid "Alias cannot be changed after creation."
|
||||||
msgstr "链接别名中不能带有 - 或者 _ 以及其他任意特殊字符"
|
msgstr "链接别名中不能带有 - 或者 _ 以及其他任意特殊字符"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:469
|
#: links/templates/links/link_list.html:498
|
||||||
#: links/templates/links/mini_apps/image_gallery.html:4 templates/base.html:8
|
#: links/templates/links/mini_apps/image_gallery.html:4 templates/base.html:8
|
||||||
#: templates/base.html:61
|
#: templates/base.html:61
|
||||||
msgid "GoLinks"
|
msgid "GoLinks"
|
||||||
msgstr "GoLinks"
|
msgstr "GoLinks"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:475
|
#: links/templates/links/link_list.html:504
|
||||||
msgid "Search aliases"
|
msgid "Search aliases"
|
||||||
msgstr "搜索别名"
|
msgstr "搜索别名"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:479
|
#: links/templates/links/link_list.html:508
|
||||||
msgid "Search aliases..."
|
msgid "Search aliases..."
|
||||||
msgstr "搜索别名..."
|
msgstr "搜索别名..."
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:487
|
#: links/templates/links/link_list.html:516
|
||||||
msgid "Matching aliases"
|
msgid "Matching aliases"
|
||||||
msgstr "匹配的别名"
|
msgstr "匹配的别名"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:493
|
#: links/templates/links/link_list.html:522
|
||||||
#: links/templates/links/tag_detail.html:34
|
#: links/templates/links/tag_detail.html:34
|
||||||
msgid "Links"
|
msgid "Links"
|
||||||
msgstr "链接"
|
msgstr "链接"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:498
|
#: links/templates/links/link_list.html:527
|
||||||
msgid "Total Clicks"
|
msgid "Total Clicks"
|
||||||
msgstr "总点击次数"
|
msgstr "总点击次数"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:506
|
#: links/templates/links/link_list.html:535
|
||||||
msgid "Random Images"
|
msgid "Random Images"
|
||||||
msgstr "随机图片"
|
msgstr "随机图片"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:512
|
#: links/templates/links/link_list.html:541
|
||||||
msgid "Shuffle all"
|
msgid "Shuffle all"
|
||||||
msgstr "换一批"
|
msgstr "换一批"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:515
|
#: links/templates/links/link_list.html:544
|
||||||
msgid "Open gallery"
|
msgid "Open gallery"
|
||||||
msgstr "打开画廊"
|
msgstr "打开画廊"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:523
|
#: links/templates/links/link_list.html:554
|
||||||
#: links/templates/links/link_list.html:533
|
#: links/templates/links/link_list.html:564
|
||||||
#: links/templates/links/link_list.html:543
|
#: links/templates/links/link_list.html:574
|
||||||
#: links/templates/links/link_list.html:553
|
#: links/templates/links/link_list.html:584
|
||||||
#: links/templates/links/link_list.html:563
|
#: links/templates/links/link_list.html:594
|
||||||
msgid "Shuffle image"
|
#: links/templates/links/link_list.html:606
|
||||||
msgstr "换一张图片"
|
#: links/templates/links/link_list.html:612
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:525
|
|
||||||
#: links/templates/links/link_list.html:535
|
|
||||||
#: links/templates/links/link_list.html:545
|
|
||||||
#: links/templates/links/link_list.html:555
|
|
||||||
#: links/templates/links/link_list.html:565
|
|
||||||
msgid "Random Image"
|
msgid "Random Image"
|
||||||
msgstr "随机图片"
|
msgstr "随机图片"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:580
|
#: links/templates/links/link_list.html:619
|
||||||
msgid "Link List"
|
msgid "Link List"
|
||||||
msgstr "链接列表"
|
msgstr "链接列表"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:582
|
#: links/templates/links/link_list.html:621
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "%(counter)s link"
|
msgid "%(counter)s link"
|
||||||
msgid_plural "%(counter)s links"
|
msgid_plural "%(counter)s links"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:590
|
#: links/templates/links/link_list.html:629
|
||||||
msgid "Search links"
|
msgid "Search links"
|
||||||
msgstr "搜索链接"
|
msgstr "搜索链接"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:591
|
#: links/templates/links/link_list.html:630
|
||||||
msgid "Search links..."
|
msgid "Search links..."
|
||||||
msgstr "搜索链接..."
|
msgstr "搜索链接..."
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:609
|
#: links/templates/links/link_list.html:648
|
||||||
msgid "Select all links"
|
msgid "Select all links"
|
||||||
msgstr "全选所有链接"
|
msgstr "全选所有链接"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:651
|
#: links/templates/links/link_list.html:690
|
||||||
#: links/templates/links/mini_apps/image_gallery.html:432
|
#: links/templates/links/mini_apps/image_gallery.html:432
|
||||||
#: templates/pricemon/dashboard.html:187
|
#: templates/pricemon/dashboard.html:187
|
||||||
msgid "Actions"
|
msgid "Actions"
|
||||||
msgstr "操作"
|
msgstr "操作"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:659
|
#: links/templates/links/link_list.html:698
|
||||||
msgid "No links available"
|
msgid "No links available"
|
||||||
msgstr "暂无可用链接"
|
msgstr "暂无可用链接"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:675
|
#: links/templates/links/link_list.html:714
|
||||||
#: links/templates/links/link_list.html:987
|
#: links/templates/links/link_list.html:1058
|
||||||
#: links/templates/links/link_list.html:995
|
#: links/templates/links/link_list.html:1066
|
||||||
msgid "Load more"
|
msgid "Load more"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:681
|
#: links/templates/links/link_list.html:720
|
||||||
msgid "Delete Selected"
|
msgid "Delete Selected"
|
||||||
msgstr "删除选中项"
|
msgstr "删除选中项"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:689
|
#: links/templates/links/link_list.html:728
|
||||||
msgid "Latest Posts"
|
msgid "Latest Posts"
|
||||||
msgstr "最新文章"
|
msgstr "最新文章"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:691
|
#: links/templates/links/link_list.html:730
|
||||||
msgid "View all posts"
|
msgid "View all posts"
|
||||||
msgstr "查看全部文章"
|
msgstr "查看全部文章"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:720
|
#: links/templates/links/link_list.html:759
|
||||||
msgid "No posts available yet"
|
msgid "No posts available yet"
|
||||||
msgstr "暂无文章"
|
msgstr "暂无文章"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:721
|
#: links/templates/links/link_list.html:760
|
||||||
msgid "Create your first post"
|
msgid "Create your first post"
|
||||||
msgstr "创建你的第一篇文章"
|
msgstr "创建你的第一篇文章"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:729
|
#: links/templates/links/link_list.html:768
|
||||||
msgid "Pinned Mini Apps"
|
msgid "Pinned Mini Apps"
|
||||||
msgstr "置顶小应用"
|
msgstr "置顶小应用"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:750
|
#: links/templates/links/link_list.html:789
|
||||||
msgid "No mini apps available"
|
msgid "No mini apps available"
|
||||||
msgstr "暂无可用小应用"
|
msgstr "暂无可用小应用"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:881
|
#: links/templates/links/link_list.html:952
|
||||||
msgid "No results found"
|
msgid "No results found"
|
||||||
msgstr "未找到结果"
|
msgstr "未找到结果"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:959
|
#: links/templates/links/link_list.html:1030
|
||||||
msgid "No matching links found"
|
msgid "No matching links found"
|
||||||
msgstr "未找到匹配的链接"
|
msgstr "未找到匹配的链接"
|
||||||
|
|
||||||
#: links/templates/links/link_list.html:977
|
#: links/templates/links/link_list.html:1048
|
||||||
#: links/templates/links/settings.html:199
|
#: links/templates/links/settings.html:199
|
||||||
msgid "Loading…"
|
msgid "Loading…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -2288,3 +2287,6 @@ msgstr ""
|
|||||||
#: templates/pricemon/watcher_form.html:145
|
#: templates/pricemon/watcher_form.html:145
|
||||||
msgid "Testing…"
|
msgid "Testing…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Shuffle image"
|
||||||
|
#~ msgstr "换一张图片"
|
||||||
|
|||||||
Reference in New Issue
Block a user