Compare commits

...

10 commits

Author SHA1 Message Date
partisan
28f71271d7 added Dockerfile & added --port --domain --skip-config-check flags 2024-11-21 12:30:16 +01:00
partisan
3ca7d57680 fixed broken search buttons 2024-11-20 14:57:55 +01:00
partisan
998896ad86 I LOVE HTML 2024-11-20 14:57:55 +01:00
partisan
db89f9c781 code cleanup & fixed compatibility for non-JS users & fixed fullscreen images being in low resolution 2024-11-20 14:57:55 +01:00
partisan
0d083f53e7 Fix incorrect links in search suggestions 2024-11-20 14:57:55 +01:00
partisan
2741c2ff3d fix broken website languages 2024-11-20 14:57:55 +01:00
crowbar
33ac94b653 completed all the languages 2024-11-20 14:57:55 +01:00
partisan
b6fd92673c Fix invalid image URLs & dynamic scrolling 2024-11-20 14:57:55 +01:00
partisan
01c48fd366 hopefully fixed 'missing.svg' in image results 2024-11-20 14:57:55 +01:00
partisan
ccba37021a hopefully fixed dynamic image loading 2024-11-20 14:57:55 +01:00
64 changed files with 9601 additions and 515 deletions

32
Dockerfile Normal file
View file

@ -0,0 +1,32 @@
# Use Alpine Linux as the base image
FROM alpine:3.20
# Update and install Golang and Git
RUN apk update && apk add --no-cache go git
# Create a new user and switch to it
RUN adduser -D myuser
USER myuser
# Set the working directory
WORKDIR /home/myuser
# Clone the Git repository
RUN git clone https://weforge.xyz/Spitfire/Search.git
# Change directory to the cloned repository
WORKDIR /home/myuser/Search
# Ensure the run.sh script is executable
RUN chmod +x run.sh
# Expose the application's port
EXPOSE 5000
# Define environment variables for port and domain with default values
ENV PORT=
ENV DOMAIN=
ENV SKIP_CONFIG="--skip-config-check"
# Run the run.sh script on container start
CMD ["sh", "-c", "./run.sh $SKIP_CONFIG --port ${PORT:-} --domain ${DOMAIN:-}"]

103
README.md Normal file
View file

@ -0,0 +1,103 @@
<p align="center">
<img src="https://weforge.xyz/Spitfire/Branding/raw/commit/a80a6e075b8daffb54783d097ffa2da1da922128/icon11.svg" alt="Logo" width="64" height="64">
</p>
<p align="center" style="font-size: 32px;">
<strong><a href="https://qgato.xyz/">QGato Search Engine</a></strong>
</p>
<p align="center">
A self-hosted private <a href="https://en.wikipedia.org/wiki/Metasearch_engine">metasearch engine</a> that aims to be more resource-efficient than its competition.
</p>
# Bare in mind that this project is still WIP
## Comparison to other search engines
| Feature | Whoogle [1] | Araa-Search | LibreY | 4get | SearchXNG | *QGato* |
| :------------------------- | ------------------ | ------------------------- | ------------------------ | ------------------------ | ------------------------- | ---------------------------------------------------- |
| Works without JavaScript | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Music search | ❓ | ❌ | ❌ | ✅ | ✅ | ✅ |
| Torrent search | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ |
| API | ❌ | ❓ [2] | ✅ | ✅ | ✅ | ✅ |
| Scalable | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| Not Resource Hungry | ❓ Moderate | ❌ Very resource hungry | ❌ Moderate 200-400mb~ | ❌ Moderate 200-400mb~ | ❌ Moderate 200-300MiB~ | ✅ about 15-20MiB at idle, 17-22MiB when searching |
| Result caching | ❌ | ❌ | ❓ | ❓ | ❓ | ✅ |
| Dynamic Page Loading | ❓ Not specified | ❌ | ❌ | ❌ | ✅ | ✅ |
| User themable | ❌ | ✅ | ❌ | ❌ | ✅[3] | ✅ |
| Unusual logo choice | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
[1]: I was not able to check this since their site does not work, same for the community instances.
[2]: In the project repo they specify that it has API, but It looks like they are no loger supporting it. Or just removed "API" button and documentation, since I was not able to find it anymore.
[3]: It is called 'User Themable' because you want to give the user freedom of choice for their theme, not by hard-setting one theme in the backend and calling it themable.
## Features
### For Casual Users
- **Works out of the box** - No configuration required, just works by default.
- **No tracking or ads** - Fully private, ad-free experience.
- **Custom themes** - Personalize the look and feel.
- **Search suggestions** - Get faster results with helpful suggestions.
- **Privacy-first** - Open-source and transparent (unlike DuckDuckGo).
- **Annoyance-free** - No pop-ups, crypto, or clutter (I'm looking at you, Brave).
### For Self-Hosting
- **Self-hosted option** - Run on your own server for even more privacy.
- **Lightweight** - Low memory footprint (15-22MiB) even during searches.
- **Decentralized** - No single point of failure.
- **Results caching in RAM** - Faster response times through caching.
- **Configurable** - Tweak features via `config.ini`.
- **Flexible media support** - Images optionally stored on HDD/SSD for caching and improved response time.
### Results Sources
- **Search suggestions** - Sources include Yahoo, Startpage, Qwant, Ecosia, Brave, Edge, and DuckDuckGo.
- **Text search** - Google, Brave, DuckDuckGo, LibreX/Y.
- **Image search** - Sources include Qwant, Bing, and Imgur.
- **Video search** - Utilizes the Piped API.
- **Maps** - Integrated OpenStreetMap.
- **File downloads** - Access via torrent sources.
## Getting Started
### Prerequisites
- Go (version 1.18 or higher recommended)
- Git (unexpected)
- Access to the internet for fetching results (even more unexpected)
### Running the QGato
Linux:
```bash
git clone https://weforgecode.xyz/Spitfire/Search.git
cd Search
chmod +x ./run.sh
./run.sh
```
Windows:
```powershell
git clone https://weforgecode.xyz/Spitfire/Search.git
cd Search
.\run.bat
```
*Its that easy!*
### Configuring
Configuration is done via the ``config.ini`` file.
On first start, you will be guided through the basic setup.
More advanced setup and all options will be listed here later, as this is still being updated.
## License
[![](https://www.gnu.org/graphics/agplv3-with-text-162x68.png)](https://www.gnu.org/licenses/agpl-3.0.html)

View file

@ -25,15 +25,33 @@ import (
var (
cachingImages = make(map[string]*sync.Mutex)
cachingImagesMu sync.Mutex
cachingSemaphore = make(chan struct{}, 10) // Limit to 10 concurrent downloads
cachingSemaphore = make(chan struct{}, 100) // Limit to concurrent downloads
invalidImageIDs = make(map[string]struct{})
invalidImageIDsMu sync.Mutex
imageURLMap = make(map[string]string) // mapping from imageID_type to imageURL
imageURLMapMu sync.RWMutex // mutex for thread-safe access
)
func cacheImage(imageURL, filename, imageID string) (string, bool, error) {
func cacheImage(imageURL, imageID string, isThumbnail bool) (string, bool, error) {
cacheDir := "image_cache"
if imageURL == "" {
recordInvalidImageID(imageID)
return "", false, fmt.Errorf("empty image URL for image ID %s", imageID)
}
// Construct the filename based on the image ID and type
var filename string
if isThumbnail {
filename = fmt.Sprintf("%s_thumb.webp", imageID)
} else {
filename = fmt.Sprintf("%s_full.webp", imageID)
}
cachedImagePath := filepath.Join(cacheDir, filename)
tempImagePath := cachedImagePath + ".tmp"
// Check if the image is already cached
if _, err := os.Stat(cachedImagePath); err == nil {
@ -96,8 +114,15 @@ func cacheImage(imageURL, filename, imageID string) (string, bool, error) {
os.Mkdir(cacheDir, os.ModePerm)
}
// Save the SVG file as-is
err = os.WriteFile(cachedImagePath, data, 0644)
// Save the SVG file as-is to the temp path
err = os.WriteFile(tempImagePath, data, 0644)
if err != nil {
recordInvalidImageID(imageID)
return "", false, err
}
// Atomically rename the temp file to the final cached image path
err = os.Rename(tempImagePath, cachedImagePath)
if err != nil {
recordInvalidImageID(imageID)
return "", false, err
@ -141,17 +166,25 @@ func cacheImage(imageURL, filename, imageID string) (string, bool, error) {
os.Mkdir(cacheDir, os.ModePerm)
}
// Open the cached file for writing
outFile, err := os.Create(cachedImagePath)
// Open the temp file for writing
outFile, err := os.Create(tempImagePath)
if err != nil {
recordInvalidImageID(imageID)
return "", false, err
}
defer outFile.Close()
// Encode the image to WebP and save
// Encode the image to WebP and save to the temp file
options := &webp.Options{Lossless: false, Quality: 80}
err = webp.Encode(outFile, img, options)
if err != nil {
outFile.Close()
recordInvalidImageID(imageID)
return "", false, err
}
outFile.Close()
// Atomically rename the temp file to the final cached image path
err = os.Rename(tempImagePath, cachedImagePath)
if err != nil {
recordInvalidImageID(imageID)
return "", false, err
@ -165,46 +198,105 @@ func cacheImage(imageURL, filename, imageID string) (string, bool, error) {
return cachedImagePath, true, nil
}
func handleCachedImages(w http.ResponseWriter, r *http.Request) {
func handleImageServe(w http.ResponseWriter, r *http.Request) {
// Extract the image ID and type from the URL
imageName := filepath.Base(r.URL.Path)
idType := imageName
var imageID, imageType string
hasExtension := false
if strings.HasSuffix(idType, ".webp") {
// Cached image, remove extension
idType = strings.TrimSuffix(idType, ".webp")
hasExtension = true
}
parts := strings.SplitN(idType, "_", 2)
if len(parts) != 2 {
http.NotFound(w, r)
return
}
imageID = parts[0]
imageType = parts[1]
cacheDir := "image_cache"
cachedImagePath := filepath.Join(cacheDir, imageName)
if _, err := os.Stat(cachedImagePath); os.IsNotExist(err) {
printDebug("Cached image not found: %s, serving missing.svg", cachedImagePath)
// Serve missing image
missingImagePath := filepath.Join("static", "images", "missing.svg")
w.Header().Set("Content-Type", "image/svg+xml")
http.ServeFile(w, r, missingImagePath)
return
} else if err != nil {
printWarn("Error checking image file: %v", err)
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
return
}
// Determine the content type based on the file extension
extension := strings.ToLower(filepath.Ext(cachedImagePath))
var contentType string
switch extension {
case ".svg":
contentType = "image/svg+xml"
case ".jpg", ".jpeg":
contentType = "image/jpeg"
case ".png":
contentType = "image/png"
case ".gif":
contentType = "image/gif"
case ".webp":
contentType = "image/webp"
default:
// Default to binary stream if unknown
contentType = "application/octet-stream"
}
filename := fmt.Sprintf("%s_%s.webp", imageID, imageType)
cachedImagePath := filepath.Join(cacheDir, filename)
if hasExtension && imageType == "thumb" {
// Requesting cached thumbnail image
if _, err := os.Stat(cachedImagePath); err == nil {
// Cached image exists, serve it
contentType := "image/webp"
w.Header().Set("Content-Type", contentType)
w.Header().Set("Cache-Control", "public, max-age=31536000") // Cache the image for 1 year
w.Header().Set("Cache-Control", "public, max-age=31536000")
http.ServeFile(w, r, cachedImagePath)
return
} else {
// Cached image not found
if config.HardCacheEnabled {
// Thumbnail should be cached, but not found
serveMissingImage(w, r)
return
}
// Else, proceed to proxy (if HardCacheEnabled is false)
}
}
// For full images, proceed to proxy the image
// Image not cached or caching not enabled
imageKey := fmt.Sprintf("%s_%s", imageID, imageType)
imageURLMapMu.RLock()
imageURL, exists := imageURLMap[imageKey]
imageURLMapMu.RUnlock()
if !exists {
// Cannot find original URL, serve missing image
serveMissingImage(w, r)
return
}
// For thumbnails, if HardCacheEnabled is true, and image not cached, serve missing image
if imageType == "thumb" && config.HardCacheEnabled {
// Thumbnail should be cached, but not found
serveMissingImage(w, r)
return
}
// For full images, proceed to proxy the image
// Fetch the image from the original URL
resp, err := http.Get(imageURL)
if err != nil {
printWarn("Error fetching image: %v", err)
serveMissingImage(w, r)
return
}
defer resp.Body.Close()
// Check if the request was successful
if resp.StatusCode != http.StatusOK {
serveMissingImage(w, r)
return
}
// Set the Content-Type header to the type of the fetched image
contentType := resp.Header.Get("Content-Type")
if contentType != "" && strings.HasPrefix(contentType, "image/") {
w.Header().Set("Content-Type", contentType)
} else {
serveMissingImage(w, r)
return
}
// Write the image content to the response
if _, err := io.Copy(w, resp.Body); err != nil {
printWarn("Error writing image to response: %v", err)
}
return
}
func handleImageStatus(w http.ResponseWriter, r *http.Request) {
@ -212,45 +304,54 @@ func handleImageStatus(w http.ResponseWriter, r *http.Request) {
ids := strings.Split(imageIDs, ",")
statusMap := make(map[string]string)
cacheDir := "image_cache"
printDebug("Received image status request for IDs: %v", ids)
invalidImageIDsMu.Lock()
defer invalidImageIDsMu.Unlock()
for _, id := range ids {
// Check if the image ID is in the invalidImageIDs map
if _, invalid := invalidImageIDs[id]; invalid {
// Image is invalid, set status to "missing"
statusMap[id] = "/static/images/missing.svg"
if id == "" {
continue
}
// Check for different possible extensions
extensions := []string{".webp", ".svg"}
var cachedImagePath string
var found bool
// Check for cached full or thumbnail images
cacheDir := "image_cache"
extensions := []string{"webp", "svg"} // Extensions without leading dots
imageReady := false
// Check thumbnail first
for _, ext := range extensions {
filename := id + ext
path := filepath.Join(cacheDir, filename)
if _, err := os.Stat(path); err == nil {
cachedImagePath = "/image_cache/" + filename
found = true
thumbFilename := fmt.Sprintf("%s_thumb.%s", id, ext)
thumbPath := filepath.Join(cacheDir, thumbFilename)
if _, err := os.Stat(thumbPath); err == nil {
statusMap[id] = fmt.Sprintf("/image/%s_thumb.%s", id, ext)
imageReady = true
break
}
}
if found {
statusMap[id] = cachedImagePath
} else {
// Image is not ready yet
statusMap[id] = ""
// If no thumbnail, check full image
if !imageReady {
for _, ext := range extensions {
fullFilename := fmt.Sprintf("%s_full.%s", id, ext)
fullPath := filepath.Join(cacheDir, fullFilename)
if _, err := os.Stat(fullPath); err == nil {
statusMap[id] = fmt.Sprintf("/image/%s_full.%s", id, ext)
imageReady = true
break
}
}
}
printDebug("Status map: %v", statusMap)
// If neither is ready
if !imageReady {
if !config.HardCacheEnabled {
// Hard cache is disabled; use the proxy URL
statusMap[id] = fmt.Sprintf("/image/%s_thumb", id)
} else {
// Hard cache is enabled; image is not yet cached
// Do not set statusMap[id]; the frontend will keep checking
}
}
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(statusMap)
@ -322,3 +423,20 @@ func removeImageResultFromCache(query string, page int, safe bool, lang string,
delete(rc.results, keyStr)
}
}
func getContentType(ext string) string {
switch strings.ToLower(ext) {
case "svg":
return "image/svg+xml"
case "jpg", "jpeg":
return "image/jpeg"
case "png":
return "image/png"
case "gif":
return "image/gif"
case "webp":
return "image/webp"
default:
return "application/octet-stream"
}
}

View file

@ -7,26 +7,19 @@ import (
"strings"
)
func handleImageProxy(w http.ResponseWriter, r *http.Request) {
// Get the URL of the image from the query string
imageURL := r.URL.Query().Get("url")
if imageURL == "" {
http.Error(w, "URL parameter is required", http.StatusBadRequest)
return
}
func serveImageProxy(w http.ResponseWriter, imageURL string) {
// Fetch the image from the external URL
resp, err := http.Get(imageURL)
if err != nil {
printWarn("Error fetching image: %v", err)
serveMissingImage(w, r)
serveMissingImage(w, nil)
return
}
defer resp.Body.Close()
// Check if the request was successful
if resp.StatusCode != http.StatusOK {
serveMissingImage(w, r)
serveMissingImage(w, nil)
return
}
@ -35,7 +28,7 @@ func handleImageProxy(w http.ResponseWriter, r *http.Request) {
if contentType != "" && strings.HasPrefix(contentType, "image/") {
w.Header().Set("Content-Type", contentType)
} else {
serveMissingImage(w, r)
serveMissingImage(w, nil)
return
}

View file

@ -5,7 +5,6 @@ import (
"fmt"
"net/http"
"net/url"
"strconv"
"strings"
"time"
@ -39,27 +38,13 @@ func PerformBingImageSearch(query, safe, lang string, page int) ([]ImageSearchRe
// Extract data using goquery
var results []ImageSearchResult
doc.Find(".iusc").Each(func(i int, s *goquery.Selection) {
// Extract image source
imgTag := s.Find("img")
imgSrc, exists := imgTag.Attr("src")
if !exists {
imgSrc, exists = imgTag.Attr("data-src")
if !exists {
return
}
}
// Extract width and height if available
width, _ := strconv.Atoi(imgTag.AttrOr("width", "0"))
height, _ := strconv.Atoi(imgTag.AttrOr("height", "0"))
// Extract the m parameter (JSON-encoded image metadata)
metadata, exists := s.Attr("m")
if !exists {
return
}
// Parse the metadata to get the media URL and title
// Parse the metadata to get the direct image URL and title
var data map[string]interface{}
if err := json.Unmarshal([]byte(metadata), &data); err == nil {
mediaURL, ok := data["murl"].(string)
@ -67,19 +52,43 @@ func PerformBingImageSearch(query, safe, lang string, page int) ([]ImageSearchRe
return
}
imgURL, ok := data["imgurl"].(string)
if !ok {
imgURL = mediaURL // Fallback to mediaURL if imgurl is not available
}
// Use imgURL as the direct image URL
directImageURL := imgURL
// Extract title from the metadata
title, _ := data["t"].(string)
// Apply the image proxy
proxiedFullURL := "/imgproxy?url=" + mediaURL
proxiedThumbURL := "/imgproxy?url=" + imgSrc
// Extract dimensions if available
width := 0
height := 0
if ow, ok := data["ow"].(float64); ok {
width = int(ow)
}
if oh, ok := data["oh"].(float64); ok {
height = int(oh)
}
// Extract thumbnail URL from the 'turl' field
thumbURL, _ := data["turl"].(string)
if thumbURL == "" {
// As a fallback, try to get it from the 'src' or 'data-src' attributes
imgTag := s.Find("img")
thumbURL, exists = imgTag.Attr("src")
if !exists {
thumbURL, _ = imgTag.Attr("data-src")
}
}
results = append(results, ImageSearchResult{
Thumb: imgSrc,
Thumb: thumbURL,
Title: strings.TrimSpace(title),
Full: imgSrc,
Full: directImageURL,
Source: mediaURL,
ProxyFull: proxiedFullURL, // Proxied full-size image URL
ProxyThumb: proxiedThumbURL, // Proxied thumbnail URL
Width: width,
Height: height,
})

View file

@ -156,8 +156,6 @@ func PerformDeviantArtImageSearch(query, safe, lang string, page int) ([]ImageSe
Width: 0,
Height: 0,
Source: resultURL,
ProxyThumb: "/imgproxy?url=" + imgSrc, // Proxied thumbnail
ProxyFull: "/imgproxy?url=" + imgSrc, // Proxied full-size image
}
}
}(imgSrc, resultURL, title)

View file

@ -64,10 +64,6 @@ func PerformImgurImageSearch(query, safe, lang string, page int) ([]ImageSearchR
width, _ := strconv.Atoi(s.Find("a img").AttrOr("width", "0"))
height, _ := strconv.Atoi(s.Find("a img").AttrOr("height", "0"))
// Generate proxied URLs
proxyFullURL := "/imgproxy?url=" + url.QueryEscape(imgSrc)
proxyThumbURL := "/imgproxy?url=" + url.QueryEscape(thumbnailSrc)
results = append(results, ImageSearchResult{
Thumb: thumbnailSrc,
Title: strings.TrimSpace(title),
@ -75,8 +71,6 @@ func PerformImgurImageSearch(query, safe, lang string, page int) ([]ImageSearchR
Width: width,
Height: height,
Source: "https://imgur.com" + urlPath,
ProxyFull: proxyFullURL,
ProxyThumb: proxyThumbURL,
})
})

View file

@ -163,8 +163,6 @@ func PerformQwantImageSearch(query, safe, lang string, page int) ([]ImageSearchR
Title: item.Title,
Full: item.Media,
Source: item.Url,
ProxyFull: "/imgproxy?url=" + item.Media,
ProxyThumb: "/imgproxy?url=" + item.Media,
Width: item.Width,
Height: item.Height,
}

226
images.go
View file

@ -19,11 +19,24 @@ func init() {
}
}
func handleImageSearch(w http.ResponseWriter, settings UserSettings, query string, page int) {
func handleImageSearch(w http.ResponseWriter, r *http.Request, settings UserSettings, query string, page int) {
startTime := time.Now()
cacheKey := CacheKey{Query: query, Page: page, Safe: settings.SafeSearch == "active", Lang: settings.SearchLanguage, Type: "image"}
combinedResults := getImageResultsFromCacheOrFetch(cacheKey, query, settings.SafeSearch, settings.SearchLanguage, page)
cacheKey := CacheKey{
Query: query,
Page: page,
Safe: settings.SafeSearch == "active",
Lang: settings.SearchLanguage,
Type: "image",
}
// Check if JavaScript is disabled
jsDisabled := r.URL.Query().Get("js_disabled") == "true"
// Determine if we should cache images synchronously
synchronous := jsDisabled
combinedResults := getImageResultsFromCacheOrFetch(cacheKey, query, settings.SafeSearch, settings.SearchLanguage, page, synchronous)
elapsedTime := time.Since(startTime)
@ -31,7 +44,7 @@ func handleImageSearch(w http.ResponseWriter, settings UserSettings, query strin
data := map[string]interface{}{
"Results": combinedResults,
"Query": query,
"Fetched": fmt.Sprintf("%.2f %s", elapsedTime.Seconds(), Translate("seconds")), // Time for fetching
"Fetched": fmt.Sprintf("%.2f %s", elapsedTime.Seconds(), Translate("seconds")),
"Page": page,
"HasPrevPage": page > 1,
"HasNextPage": len(combinedResults) >= 50,
@ -41,14 +54,21 @@ func handleImageSearch(w http.ResponseWriter, settings UserSettings, query strin
"Theme": settings.Theme,
"Safe": settings.SafeSearch,
"IsThemeDark": settings.IsThemeDark,
"HardCacheEnabled": config.HardCacheDuration == 0,
"HardCacheEnabled": config.HardCacheEnabled,
"JsDisabled": jsDisabled,
}
// Render the template without measuring the time
if r.URL.Query().Get("ajax") == "true" {
// Render only the images
renderTemplate(w, "images_only.html", data)
return
}
// Render the full page
renderTemplate(w, "images.html", data)
}
func getImageResultsFromCacheOrFetch(cacheKey CacheKey, query, safe, lang string, page int) []ImageSearchResult {
func getImageResultsFromCacheOrFetch(cacheKey CacheKey, query, safe, lang string, page int, synchronous bool) []ImageSearchResult {
cacheChan := make(chan []SearchResult)
var combinedResults []ImageSearchResult
@ -66,7 +86,7 @@ func getImageResultsFromCacheOrFetch(cacheKey CacheKey, query, safe, lang string
select {
case results := <-cacheChan:
if results == nil {
combinedResults = fetchImageResults(query, safe, lang, page)
combinedResults = fetchImageResults(query, safe, lang, page, synchronous)
if len(combinedResults) > 0 {
combinedResults = filterValidImages(combinedResults)
resultsCache.Set(cacheKey, convertToSearchResults(combinedResults))
@ -77,7 +97,7 @@ func getImageResultsFromCacheOrFetch(cacheKey CacheKey, query, safe, lang string
}
case <-time.After(2 * time.Second):
printInfo("Cache check timeout")
combinedResults = fetchImageResults(query, safe, lang, page)
combinedResults = fetchImageResults(query, safe, lang, page, synchronous)
if len(combinedResults) > 0 {
combinedResults = filterValidImages(combinedResults)
resultsCache.Set(cacheKey, convertToSearchResults(combinedResults))
@ -87,10 +107,9 @@ func getImageResultsFromCacheOrFetch(cacheKey CacheKey, query, safe, lang string
return combinedResults
}
func fetchImageResults(query, safe, lang string, page int) []ImageSearchResult {
func fetchImageResults(query, safe, lang string, page int, synchronous bool) []ImageSearchResult {
var results []ImageSearchResult
engineCount := len(imageSearchEngines)
safeBool := safe == "active"
// Determine the engine to use based on the page number
engineIndex := (page - 1) % engineCount
@ -99,9 +118,6 @@ func fetchImageResults(query, safe, lang string, page int) []ImageSearchResult {
// Calculate the specific page number for the selected engine
enginePage := (page-1)/engineCount + 1
// Debug print to verify the selected engine and page
printInfo("Fetching image results for overall page %d using engine: %s (engine page %d)", page, engine.Name, enginePage)
// Fetch results from the selected engine
searchResults, _, err := engine.Func(query, safe, lang, enginePage)
if err != nil {
@ -109,30 +125,47 @@ func fetchImageResults(query, safe, lang string, page int) []ImageSearchResult {
} else {
for _, result := range searchResults {
imageResult := result.(ImageSearchResult)
if config.HardCacheEnabled {
// Skip image if thumbnail URL is empty
if imageResult.Thumb == "" {
printWarn("Skipping image with empty thumbnail URL. Full URL: %s", imageResult.Full)
continue
}
// Generate hash and set up caching
hasher := md5.New()
hasher.Write([]byte(imageResult.Full))
hash := hex.EncodeToString(hasher.Sum(nil))
filename := hash + ".webp"
imageResult.ID = hash
imageResult.ProxyFull = "/image_cache/" + filename
// Start caching and validation in the background
go func(imgResult ImageSearchResult, originalURL, filename string) {
_, success, err := cacheImage(originalURL, filename, imgResult.ID)
if err != nil {
printWarn("Failed to cache image %s: %v", originalURL, err)
// Store mapping from imageID_full and imageID_thumb to URLs
imageURLMapMu.Lock()
imageURLMap[fmt.Sprintf("%s_full", hash)] = imageResult.Full
imageURLMap[fmt.Sprintf("%s_thumb", hash)] = imageResult.Thumb
imageURLMapMu.Unlock()
// Set ProxyFull and ProxyThumb
if config.HardCacheEnabled {
// Cache the thumbnail image asynchronously
go func(imgResult ImageSearchResult) {
_, success, err := cacheImage(imgResult.Thumb, imgResult.ID, true)
if err != nil || !success {
printWarn("Failed to cache thumbnail image %s: %v", imgResult.Thumb, err)
removeImageResultFromCache(query, page, safe == "active", lang, imgResult.ID)
}
if !success {
removeImageResultFromCache(query, page, safeBool, lang, imgResult.ID)
}
}(imageResult, imageResult.Full, filename)
}(imageResult)
// Set ProxyThumb to the proxy URL (initially placeholder)
imageResult.ProxyThumb = fmt.Sprintf("/image/%s_thumb.webp", hash)
// Set ProxyFull to the proxy URL
imageResult.ProxyFull = fmt.Sprintf("/image/%s_full", hash)
} else {
// Use proxied URLs when hard cache is disabled
imageResult.ProxyThumb = "/imgproxy?url=" + imageResult.Thumb
imageResult.ProxyFull = "/imgproxy?url=" + imageResult.Full
// Hard cache disabled, proxy both thumb and full images
imageResult.ProxyThumb = fmt.Sprintf("/image/%s_thumb", hash)
imageResult.ProxyFull = fmt.Sprintf("/image/%s_full", hash)
}
results = append(results, imageResult)
}
}
@ -152,30 +185,46 @@ func fetchImageResults(query, safe, lang string, page int) []ImageSearchResult {
}
for _, result := range searchResults {
imageResult := result.(ImageSearchResult)
if config.HardCacheEnabled {
// Skip image if thumbnail URL is empty
if imageResult.Thumb == "" {
printWarn("Skipping image with empty thumbnail URL. Full URL: %s", imageResult.Full)
continue
}
// Generate hash and set up caching
hasher := md5.New()
hasher.Write([]byte(imageResult.Full))
hash := hex.EncodeToString(hasher.Sum(nil))
filename := hash + ".webp"
imageResult.ID = hash
imageResult.ProxyFull = "/image_cache/" + filename
// Start caching and validation in the background
go func(imgResult ImageSearchResult, originalURL, filename string) {
_, success, err := cacheImage(originalURL, filename, imgResult.ID)
if err != nil {
printWarn("Failed to cache image %s: %v", originalURL, err)
// Store mapping from imageID_full and imageID_thumb to URLs
imageURLMapMu.Lock()
imageURLMap[fmt.Sprintf("%s_full", hash)] = imageResult.Full
imageURLMap[fmt.Sprintf("%s_thumb", hash)] = imageResult.Thumb
imageURLMapMu.Unlock()
if config.HardCacheEnabled {
// Cache the thumbnail image asynchronously
go func(imgResult ImageSearchResult) {
_, success, err := cacheImage(imgResult.Thumb, imgResult.ID, true)
if err != nil || !success {
printWarn("Failed to cache thumbnail image %s: %v", imgResult.Thumb, err)
removeImageResultFromCache(query, page, safe == "active", lang, imgResult.ID)
}
if !success {
removeImageResultFromCache(query, page, safeBool, lang, imgResult.ID)
}
}(imageResult, imageResult.Full, filename)
}(imageResult)
// Set ProxyThumb to the proxy URL (initially placeholder)
imageResult.ProxyThumb = fmt.Sprintf("/image/%s_thumb.webp", hash)
// Set ProxyFull to the proxy URL
imageResult.ProxyFull = fmt.Sprintf("/image/%s_full", hash)
} else {
// Use proxied URLs when hard cache is disabled
imageResult.ProxyThumb = "/imgproxy?url=" + imageResult.Thumb
imageResult.ProxyFull = "/imgproxy?url=" + imageResult.Full
// Hard cache disabled, proxy both thumb and full images
imageResult.ProxyThumb = fmt.Sprintf("/image/%s_thumb", hash)
imageResult.ProxyFull = fmt.Sprintf("/image/%s_full", hash)
}
results = append(results, imageResult)
}
@ -185,6 +234,16 @@ func fetchImageResults(query, safe, lang string, page int) []ImageSearchResult {
}
}
// // Filter out images that failed to cache or are invalid
// validResults := make([]ImageSearchResult, 0, len(results))
// for _, imageResult := range results {
// if imageResult.ProxyFull != "" {
// validResults = append(validResults, imageResult)
// } else {
// printWarn("Skipping invalid image with ID %s", imageResult.ID)
// }
// }
// Final debug print to show the count of results fetched
printInfo("Fetched %d image results for overall page %d", len(results), page)
@ -204,82 +263,3 @@ func wrapImageSearchFunc(f func(string, string, string, int) ([]ImageSearchResul
return searchResults, duration, nil
}
}
// func isValidImageURL(imageURL string) bool {
// client := &http.Client{
// Timeout: 10 * time.Second,
// Transport: &http.Transport{
// TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
// },
// }
// req, err := http.NewRequest("GET", imageURL, nil)
// if err != nil {
// return false
// }
// // Set headers to mimic a real browser
// req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "+
// "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36")
// req.Header.Set("Accept", "image/webp,image/*,*/*;q=0.8")
// req.Header.Set("Accept-Language", "en-US,en;q=0.9")
// req.Header.Set("Referer", imageURL) // Some servers require a referer
// resp, err := client.Do(req)
// if err != nil {
// return false
// }
// defer resp.Body.Close()
// if resp.StatusCode < 200 || resp.StatusCode >= 400 {
// return false
// }
// // Limit the amount of data read to 10KB
// limitedReader := io.LimitReader(resp.Body, 10240) // 10KB
// // Attempt to decode image configuration
// _, _, err = image.DecodeConfig(limitedReader)
// if err != nil {
// return false
// }
// return true
// }
// // This function can be used alternatively to isValidImageURL(), Its slower but reliable
// func isImageAccessible(imageURL string) bool {
// client := &http.Client{
// Timeout: 5 * time.Second,
// CheckRedirect: func(req *http.Request, via []*http.Request) error {
// if len(via) >= 10 {
// return http.ErrUseLastResponse
// }
// return nil
// },
// }
// resp, err := client.Get(imageURL)
// if err != nil {
// return false
// }
// defer resp.Body.Close()
// if resp.StatusCode < 200 || resp.StatusCode >= 400 {
// return false
// }
// // Read the entire image data
// data, err := io.ReadAll(resp.Body)
// if err != nil {
// return false
// }
// // Try to decode the image
// _, _, err = image.Decode(bytes.NewReader(data))
// if err != nil {
// return false
// }
// return true
// }

41
init.go
View file

@ -1,6 +1,8 @@
package main
import (
"flag"
"os"
"time"
)
@ -35,14 +37,43 @@ const configFilePath = "config.ini"
var config Config
func main() {
// Command-line flags
portFlag := flag.Int("port", 0, "Port number to run the application (overrides config)")
domainFlag := flag.String("domain", "", "Domain address for the application (overrides config)")
skipConfigFlag := flag.Bool("skip-config-check", false, "Skip interactive prompts and load config.ini")
// Parse command-line flags
flag.Parse()
if *skipConfigFlag {
// Skip interactive configuration
if _, err := os.Stat(configFilePath); err == nil {
// Load from config file if it exists
config = loadConfig()
} else {
// Use defaults if config file does not exist
config = defaultConfig
saveConfig(config) // Save the defaults to config.ini
printInfo("Configuration saved to %s", configFilePath)
}
} else {
// Initialize configuration interactively or from config file
err := initConfig()
if err != nil {
printErr("Error during initialization:")
return
}
}
// Override with command-line arguments if provided
if *portFlag != 0 {
config.Port = *portFlag
}
if *domainFlag != "" {
config.Domain = *domainFlag
}
loadNodeConfig()
// go checkMasterHeartbeat() // Not currently used
if config.AuthCode == "" {
config.AuthCode = generateStrongRandomString(64)
@ -57,14 +88,6 @@ func main() {
}
config.PeerID = hostID
// if len(config.Peers) > 0 {
// time.Sleep(2 * time.Second) // Give some time for connections to establish
// startElection()
// }
// Start automatic update checker, not used now
//go checkForUpdates()
InitializeLanguage("en") // Initialize language before generating OpenSearch
generateOpenSearchXML(config)

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Instellings"
msgid "settings"
msgstr "Instellings"
msgid "theme"
msgstr "Tema"
msgid "theme_dark"
msgstr "Donker"
msgid "theme_light"
msgstr "Lig"
msgid "theme_night"
msgstr "Nag"
msgid "theme_black"
msgstr "Swart"
msgid "theme_mocha"
msgstr "Mocha"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Veilige Soektog"
msgid "off"
msgstr "Af"
msgid "on"
msgstr "Aan"
msgid "site_language"
msgstr "Taal van die webwerf"
msgid "search_language"
msgstr "Soektaal"
msgid "any_language"
msgstr "Enige taal"
msgid "no_results"
msgstr "Geen resultate gevind vir '%s' nie. Probeer ander sleutelwoorde."
msgid "no_more_results"
msgstr "Dit lyk of dit die einde van die resultate is."
msgid "safe_search_off"
msgstr "Filter af"
msgid "safe_search_on"
msgstr "Filter aan"
msgid "save_settings"
msgstr "Stoor instellings"
msgid "all_settings"
msgstr "Alle instellings"
msgid "site_name"
msgstr "QGato"
msgid "site_description"
msgstr "QGato - Privaat en Oop"
msgid "site_tags"
msgstr "soekenjin, qgato, spitfire"
msgid "search"
msgstr "Soek"
msgid "web"
msgstr "Webwerf"
msgid "image"
msgstr "Beeld"
msgid "images"
msgstr "Beelde"
msgid "video"
msgstr "Video"
msgid "videos"
msgstr "Videos"
msgid "forum"
msgstr "Forum"
msgid "forums"
msgstr "Forums"
msgid "map"
msgstr "Kaart"
msgid "maps"
msgstr "Kaarte"
msgid "file"
msgstr "Lêer"
msgid "torrents"
msgstr "Torrents"
msgid "searching_for_new_results"
msgstr "Soek vir nuwe resultate..."
msgid "previous"
msgstr "Vorige"
msgid "next"
msgstr "Volgende"
msgid "fetched_in"
msgstr "Verkry in %s sekondes"
msgid "sort_seeders"
msgstr "Aantal saaiers"
msgid "sort_leechers"
msgstr "Aantal leechers"
msgid "sort_lth"
msgstr "Grootte (klein na groot)"
msgid "sort_htl"
msgstr "Grootte (groot na klein)"
msgid "category_all"
msgstr "Alle kategorieë"
msgid "category_movie"
msgstr "Flieks"
msgid "category_audiobook"
msgstr "Oudioboeke"
msgid "category_tv"
msgstr "TV Reekse"
msgid "category_games"
msgstr "Speletjies"
msgid "category_software"
msgstr "Sagteware"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Musiek"
msgid "category_xxx"
msgstr "XXX (18+)"
msgid "apply_settings"
msgstr "Pas instellings toe"
msgid "error"
msgstr "Fout"
msgid "views"
msgstr "Aansigte"
msgid "seeders"
msgstr "Saaiers"
msgid "leechers"
msgstr "Leechers"
msgid "no_results_found"
msgstr "Jou soektog vir '%s' het geen resultate opgelewer nie."
msgid "suggest_rephrase"
msgstr "Probeer die navraag verander of speltoetse regmaak."
msgid "streets"
msgstr "Strate"
msgid "satellite"
msgstr "Satelliet"
msgid "esri_satellite"
msgstr "Esri Satelliet"
msgid "topographic"
msgstr "Topografiese"
msgid "locate_me"
msgstr "Lokaliseer my"
msgid "you_are_within"
msgstr "Jy is binne "
msgid "meters_from_point"
msgstr "meter van hierdie punt af"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "الإعدادات"
msgid "settings"
msgstr "الإعدادات"
msgid "theme"
msgstr "السمة"
msgid "theme_dark"
msgstr "داكن"
msgid "theme_light"
msgstr "فاتح"
msgid "theme_night"
msgstr "ليلي"
msgid "theme_black"
msgstr "أسود"
msgid "theme_mocha"
msgstr "موكا"
msgid "theme_latte"
msgstr "لاتيه"
msgid "safe_search"
msgstr "البحث الآمن"
msgid "off"
msgstr "إيقاف"
msgid "on"
msgstr "تشغيل"
msgid "site_language"
msgstr "لغة الموقع"
msgid "search_language"
msgstr "لغة البحث"
msgid "any_language"
msgstr "أي لغة"
msgid "no_results"
msgstr "لم يتم العثور على نتائج لـ '%s'. جرب كلمات مفتاحية أخرى."
msgid "no_more_results"
msgstr "يبدو أن هذه نهاية النتائج."
msgid "safe_search_off"
msgstr "إيقاف التصفية"
msgid "safe_search_on"
msgstr "تشغيل التصفية"
msgid "save_settings"
msgstr "حفظ الإعدادات"
msgid "all_settings"
msgstr "كل الإعدادات"
msgid "site_name"
msgstr "كيو جاتو"
msgid "site_description"
msgstr "كيو جاتو - خاص ومفتوح"
msgid "site_tags"
msgstr "محرك بحث, كيو جاتو, سبايتفاير"
msgid "search"
msgstr "بحث"
msgid "web"
msgstr "ويب"
msgid "image"
msgstr "صورة"
msgid "images"
msgstr "صور"
msgid "video"
msgstr "فيديو"
msgid "videos"
msgstr "فيديوهات"
msgid "forum"
msgstr "منتدى"
msgid "forums"
msgstr "منتديات"
msgid "map"
msgstr "خريطة"
msgid "maps"
msgstr "خرائط"
msgid "file"
msgstr "ملف"
msgid "torrents"
msgstr "تورنتات"
msgid "searching_for_new_results"
msgstr "جاري البحث عن نتائج جديدة..."
msgid "previous"
msgstr "السابق"
msgid "next"
msgstr "التالي"
msgid "fetched_in"
msgstr "تم التحميل في %s ثوانٍ"
msgid "sort_seeders"
msgstr "عدد المزودين"
msgid "sort_leechers"
msgstr "عدد المستهلكين"
msgid "sort_lth"
msgstr "الحجم (من الأصغر)"
msgid "sort_htl"
msgstr "الحجم (من الأكبر)"
msgid "category_all"
msgstr "جميع الفئات"
msgid "category_movie"
msgstr "أفلام"
msgid "category_audiobook"
msgstr "كتب صوتية"
msgid "category_tv"
msgstr "مسلسلات تلفزيونية"
msgid "category_games"
msgstr "ألعاب"
msgid "category_software"
msgstr "برامج"
msgid "category_anime"
msgstr "أنمي"
msgid "category_music"
msgstr "موسيقى"
msgid "category_xxx"
msgstr "XXX (للكبار فقط)"
msgid "apply_settings"
msgstr "تطبيق الإعدادات"
msgid "error"
msgstr "خطأ"
msgid "views"
msgstr "المشاهدات"
msgid "seeders"
msgstr "مزودون"
msgid "leechers"
msgstr "مستهلكون"
msgid "no_results_found"
msgstr "بحثك عن '%s' لم يُرجع أي نتائج."
msgid "suggest_rephrase"
msgstr "حاول تعديل الاستعلام أو تصحيح الأخطاء الإملائية."
msgid "streets"
msgstr "شوارع"
msgid "satellite"
msgstr "قمر صناعي"
msgid "esri_satellite"
msgstr "قمر صناعي ESRI"
msgid "topographic"
msgstr "طوبوغرافي"
msgid "locate_me"
msgstr "حدد موقعي"
msgid "you_are_within"
msgstr "أنت على بعد "
msgid "meters_from_point"
msgstr "أمتار من هذه النقطة"

View file

@ -0,0 +1,201 @@
msgid "settings_title"
msgstr "Налады"
msgid "settings"
msgstr "Налады"
msgid "theme"
msgstr "Тэма"
msgid "theme_dark"
msgstr "Цёмная"
msgid "theme_light"
msgstr "Светлая"
msgid "theme_night"
msgstr "Начная"
msgid "theme_black"
msgstr "Чорная"
msgid "theme_mocha"
msgstr "Мока"
msgid "theme_latte"
msgstr "Латэ"
msgid "safe_search"
msgstr "Бяспечны пошук"
msgid "off"
msgstr "Выключыць"
msgid "on"
msgstr "Уключыць"
msgid "site_language"
msgstr "Мова сайта"
msgid "search_language"
msgstr "Мова пошуку"
msgid "any_language"
msgstr "Любая мова"
msgid "no_results"
msgstr "Няма вынікаў для '%s'. Паспрабуйце іншыя ключавыя словы."
msgid "no_more_results"
msgstr "Здаецца, гэта канец вынікаў."
msgid "safe_search_off"
msgstr "Выключыць фільтрацыю"
msgid "safe_search_on"
msgstr "Уключыць фільтрацыю"
msgid "save_settings"
msgstr "Захаваць налады"
msgid "all_settings"
msgstr "Усе налады"
msgid "site_name"
msgstr "Q Гато"
msgid "site_description"
msgstr "Q Гато - прыватны і адкрыты"
msgid "site_tags"
msgstr "пошукавая сістэма, Q Гато, Спайтафайр"
msgid "search"
msgstr "Пошук"
msgid "web"
msgstr "Вэб"
msgid "image"
msgstr "Выява"
msgid "images"
msgstr "Выявы"
msgid "video"
msgstr "Відэа"
msgid "videos"
msgstr "Відэа"
msgid "forum"
msgstr "Форум"
msgid "forums"
msgstr "Форумы"
msgid "map"
msgstr "Карта"
msgid "maps"
msgstr "Карты"
msgid "file"
msgstr "Файл"
msgid "torrents"
msgstr "Торэнты"
msgid "searching_for_new_results"
msgstr "Пошук новых вынікаў..."
msgid "previous"
msgstr "Папярэдняе"
msgid "next"
msgstr "Наступнае"
msgid "fetched_in"
msgstr "Загружана за %s секунд"
msgid "sort_seeders"
msgstr "Па колькасці сейдэраў"
msgid "sort_leechers"
msgstr "Па колькасці лічэраў"
msgid "sort_lth"
msgstr "Памер (ад найменшага)"
msgid "sort_htl"
msgstr "Памер (ад найбольшага)"
msgid "category_all"
msgstr "Усе катэгорыі"
msgid "category_movie"
msgstr "Фільмы"
msgid "category_audiobook"
msgstr "Аўдыякнігі"
msgid "category_tv"
msgstr "ТБ-серыялы"
msgid "category_games"
msgstr "Гульні"
msgid "category_software"
msgstr "Праграмы"
msgid "category_anime"
msgstr "Анімэ"
msgid "category_music"
msgstr "Музыка"
msgid "category_xxx"
msgstr "XXX (толькі для дарослых)"
msgid "apply_settings"
msgstr "Ужыць налады"
msgid "error"
msgstr "Памылка"
msgid "views"
msgstr "Прагляды"
msgid "seeders"
msgstr "Сейдэры"
msgid "leechers"
msgstr "Лічэры"
msgid "no_results_found"
msgstr "Вынікі для '%s' не знойдзены."
msgid "suggest_rephrase"
msgstr "Паспрабуйце змяніць запыт або праверыць арфаграфію."
msgid "streets"
msgstr "Вуліцы"
msgid "satellite"
msgstr "Спадарожнік"
msgid "esri_satellite"
msgstr "Спадарожнік ESRI"
msgid "topographic"
msgstr "Тапаграфічная"
msgid "locate_me"
msgstr "Вызначыць маё месцазнаходжанне"
msgid "you_are_within"
msgstr "Вы знаходзіцеся на адлегласці"
msgid "meters_from_point"
msgstr "метраў ад гэтага пункта"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Настройки"
msgid "settings"
msgstr "Настройки"
msgid "theme"
msgstr "Тема"
msgid "theme_dark"
msgstr "Тъмна"
msgid "theme_light"
msgstr "Светла"
msgid "theme_night"
msgstr "Нощна"
msgid "theme_black"
msgstr "Черна"
msgid "theme_mocha"
msgstr "Мока"
msgid "theme_latte"
msgstr "Лате"
msgid "safe_search"
msgstr "Безопасно търсене"
msgid "off"
msgstr "Изключено"
msgid "on"
msgstr "Включено"
msgid "site_language"
msgstr "Език на сайта"
msgid "search_language"
msgstr "Език на търсене"
msgid "any_language"
msgstr "Всеки език"
msgid "no_results"
msgstr "Не са намерени резултати за вашето запитване '%s'. Опитайте с други ключови думи."
msgid "no_more_results"
msgstr "Изглежда, че това са всички резултати."
msgid "safe_search_off"
msgstr "Безопасното търсене е изключено"
msgid "safe_search_on"
msgstr "Безопасното търсене е включено"
msgid "save_settings"
msgstr "Запазване на настройките"
msgid "all_settings"
msgstr "Всички настройки"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Лично и отворено"
msgid "site_tags"
msgstr "Търсачка, Q-Gato, Spitfire"
msgid "search"
msgstr "Търсене"
msgid "web"
msgstr "Интернет"
msgid "image"
msgstr "Изображение"
msgid "images"
msgstr "Изображения"
msgid "video"
msgstr "Видео"
msgid "videos"
msgstr "Видеа"
msgid "forum"
msgstr "Форум"
msgid "forums"
msgstr "Форуми"
msgid "map"
msgstr "Карта"
msgid "maps"
msgstr "Карти"
msgid "file"
msgstr "Файл"
msgid "torrents"
msgstr "Торенти"
msgid "searching_for_new_results"
msgstr "Търсят се нови резултати..."
msgid "previous"
msgstr "Предишен"
msgid "next"
msgstr "Следващ"
msgid "fetched_in"
msgstr "Заредено за %s секунди"
msgid "sort_seeders"
msgstr "Сийдъри (качване)"
msgid "sort_leechers"
msgstr "Лийчъри (сваляне)"
msgid "sort_lth"
msgstr "Размер (от малък към голям)"
msgid "sort_htl"
msgstr "Размер (от голям към малък)"
msgid "category_all"
msgstr "Всички категории"
msgid "category_movie"
msgstr "Филми"
msgid "category_audiobook"
msgstr "Аудиокниги"
msgid "category_tv"
msgstr "Сериали"
msgid "category_games"
msgstr "Игри"
msgid "category_software"
msgstr "Софтуер"
msgid "category_anime"
msgstr "Аниме"
msgid "category_music"
msgstr "Музика"
msgid "category_xxx"
msgstr "XXX (за възрастни)"
msgid "apply_settings"
msgstr "Прилагане на настройките"
msgid "error"
msgstr "Грешка"
msgid "views"
msgstr "Преглеждания"
msgid "seeders"
msgstr "Сийдъри (качване)"
msgid "leechers"
msgstr "Лийчъри (сваляне)"
msgid "no_results_found"
msgstr "Вашето търсене '%s' не върна резултати."
msgid "suggest_rephrase"
msgstr "Опитайте да преформулирате или коригирате грешките."
msgid "streets"
msgstr "Улици"
msgid "satellite"
msgstr "Сателит"
msgid "esri_satellite"
msgstr "ESRI Сателит"
msgid "topographic"
msgstr "Топографска"
msgid "locate_me"
msgstr "Намери ме"
msgid "you_are_within"
msgstr "Намирате се на "
msgid "meters_from_point"
msgstr "метра от тази точка"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Configuració"
msgid "settings"
msgstr "Configuració"
msgid "theme"
msgstr "Tema"
msgid "theme_dark"
msgstr "Fosc"
msgid "theme_light"
msgstr "Clar"
msgid "theme_night"
msgstr "Nocturn"
msgid "theme_black"
msgstr "Negre"
msgid "theme_mocha"
msgstr "Mocha"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Cerca segura"
msgid "off"
msgstr "Desactivat"
msgid "on"
msgstr "Activat"
msgid "site_language"
msgstr "Llengua del lloc"
msgid "search_language"
msgstr "Llengua de cerca"
msgid "any_language"
msgstr "Qualsevol llengua"
msgid "no_results"
msgstr "No s'han trobat resultats per a la consulta '%s'. Proveu altres paraules clau."
msgid "no_more_results"
msgstr "Sembla que has arribat al final dels resultats."
msgid "safe_search_off"
msgstr "La cerca segura està desactivada"
msgid "safe_search_on"
msgstr "La cerca segura està activada"
msgid "save_settings"
msgstr "Desa la configuració"
msgid "all_settings"
msgstr "Tota la configuració"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Privat i Obert"
msgid "site_tags"
msgstr "Motor de cerca, Q-Gato, Spitfire"
msgid "search"
msgstr "Cerca"
msgid "web"
msgstr "Web"
msgid "image"
msgstr "Imatge"
msgid "images"
msgstr "Imatges"
msgid "video"
msgstr "Vídeo"
msgid "videos"
msgstr "Vídeos"
msgid "forum"
msgstr "Fòrum"
msgid "forums"
msgstr "Fòrums"
msgid "map"
msgstr "Mapa"
msgid "maps"
msgstr "Mapes"
msgid "file"
msgstr "Fitxer"
msgid "torrents"
msgstr "Torrents"
msgid "searching_for_new_results"
msgstr "Cercant nous resultats..."
msgid "previous"
msgstr "Anterior"
msgid "next"
msgstr "Següent"
msgid "fetched_in"
msgstr "Recuperat en %s segons"
msgid "sort_seeders"
msgstr "Ordena per fonts"
msgid "sort_leechers"
msgstr "Ordena per receptors"
msgid "sort_lth"
msgstr "Mida (de menor a major)"
msgid "sort_htl"
msgstr "Mida (de major a menor)"
msgid "category_all"
msgstr "Totes les categories"
msgid "category_movie"
msgstr "Pel·lícules"
msgid "category_audiobook"
msgstr "Audiollibres"
msgid "category_tv"
msgstr "Sèries de TV"
msgid "category_games"
msgstr "Videojocs"
msgid "category_software"
msgstr "Programari"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Música"
msgid "category_xxx"
msgstr "XXX (per a adults)"
msgid "apply_settings"
msgstr "Aplica la configuració"
msgid "error"
msgstr "Error"
msgid "views"
msgstr "Visualitzacions"
msgid "seeders"
msgstr "Fonts"
msgid "leechers"
msgstr "Receptors"
msgid "no_results_found"
msgstr "La cerca per '%s' no ha retornat cap resultat."
msgid "suggest_rephrase"
msgstr "Proveu de reformular o corregir errors."
msgid "streets"
msgstr "Carrers"
msgid "satellite"
msgstr "Satèl·lit"
msgid "esri_satellite"
msgstr "Satèl·lit ESRI"
msgid "topographic"
msgstr "Topogràfic"
msgid "locate_me"
msgstr "Localitza'm"
msgid "you_are_within"
msgstr "Ets a "
msgid "meters_from_point"
msgstr "metres d'aquest punt"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Nastavení"
msgid "settings"
msgstr "Nastavení"
msgid "theme"
msgstr "Motiv"
msgid "theme_dark"
msgstr "Tmavé"
msgid "theme_light"
msgstr "Světlé"
msgid "theme_night"
msgstr "Noční"
msgid "theme_black"
msgstr "Černé"
msgid "theme_mocha"
msgstr "Mocha"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Bezpečné vyhledávání"
msgid "off"
msgstr "Vypnuto"
msgid "on"
msgstr "Zapnuto"
msgid "site_language"
msgstr "Jazyk stránky"
msgid "search_language"
msgstr "Jazyk vyhledávání"
msgid "any_language"
msgstr "Libovolný jazyk"
msgid "no_results"
msgstr "Nebyly nalezeny žádné výsledky pro '%s'. Zkuste jiná klíčová slova."
msgid "no_more_results"
msgstr "Vypadá to, že zde výsledky končí."
msgid "safe_search_off"
msgstr "Bezpečné vyhledávání vypnuto"
msgid "safe_search_on"
msgstr "Bezpečné vyhledávání zapnuto"
msgid "save_settings"
msgstr "Uložit nastavení"
msgid "all_settings"
msgstr "Všechna nastavení"
msgid "site_name"
msgstr "QGato"
msgid "site_description"
msgstr "QGato - Soukromé a otevřené"
msgid "site_tags"
msgstr "vyhledávání, qgato, spitfire"
msgid "search"
msgstr "Vyhledat"
msgid "web"
msgstr "Web"
msgid "image"
msgstr "Obrázek"
msgid "images"
msgstr "Obrázky"
msgid "video"
msgstr "Video"
msgid "videos"
msgstr "Videa"
msgid "forum"
msgstr "Fórum"
msgid "forums"
msgstr "Fóra"
msgid "map"
msgstr "Mapa"
msgid "maps"
msgstr "Mapy"
msgid "file"
msgstr "Soubor"
msgid "torrents"
msgstr "Torrenty"
msgid "searching_for_new_results"
msgstr "Hledám nové výsledky..."
msgid "previous"
msgstr "Předchozí"
msgid "next"
msgstr "Další"
msgid "fetched_in"
msgstr "Načteno za %s sekund"
msgid "sort_seeders"
msgstr "Počet seedů"
msgid "sort_leechers"
msgstr "Počet leechů"
msgid "sort_lth"
msgstr "Velikost (od nejmenší)"
msgid "sort_htl"
msgstr "Velikost (od největší)"
msgid "category_all"
msgstr "Všechny kategorie"
msgid "category_movie"
msgstr "Filmy"
msgid "category_audiobook"
msgstr "Audioknihy"
msgid "category_tv"
msgstr "TV pořady"
msgid "category_games"
msgstr "Hry"
msgid "category_software"
msgstr "Software"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Hudba"
msgid "category_xxx"
msgstr "XXX (18+)"
msgid "apply_settings"
msgstr "Použít nastavení"
msgid "error"
msgstr "Chyba"
msgid "views"
msgstr "zobrazení"
msgid "seeders"
msgstr "Seedři"
msgid "leechers"
msgstr "Leechři"
msgid "no_results_found"
msgstr "Vaše vyhledávání '%s' nepřineslo žádné výsledky."
msgid "suggest_rephrase"
msgstr "Zkuste formulovat vyhledávací dotaz jinak nebo opravit případné pravopisné chyby."
msgid "streets"
msgstr "Ulice"
msgid "satellite"
msgstr "Satelitní"
msgid "esri_satellite"
msgstr "Esri Satelitní"
msgid "topographic"
msgstr "Topografická"
msgid "locate_me"
msgstr "Najít mě"
msgid "you_are_within"
msgstr "Jste v dosahu "
msgid "meters_from_point"
msgstr "metrů od tohoto bodu"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Indstillinger"
msgid "settings"
msgstr "Indstillinger"
msgid "theme"
msgstr "Tema"
msgid "theme_dark"
msgstr "Mørk"
msgid "theme_light"
msgstr "Lys"
msgid "theme_night"
msgstr "Nat"
msgid "theme_black"
msgstr "Sort"
msgid "theme_mocha"
msgstr "Mocha"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Sikker søgning"
msgid "off"
msgstr "Fra"
msgid "on"
msgstr "Til"
msgid "site_language"
msgstr "Websidesprog"
msgid "search_language"
msgstr "Søgningssprog"
msgid "any_language"
msgstr "Ethvert sprog"
msgid "no_results"
msgstr "Ingen resultater fundet for '%s'. Prøv med andre nøgleord."
msgid "no_more_results"
msgstr "Det ser ud til at være slutningen på resultaterne."
msgid "safe_search_off"
msgstr "Sikker søgning er slået fra"
msgid "safe_search_on"
msgstr "Sikker søgning er slået til"
msgid "save_settings"
msgstr "Gem indstillinger"
msgid "all_settings"
msgstr "Alle indstillinger"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Privat og Åben"
msgid "site_tags"
msgstr "Søgemaskine, Q-Gato, Spitfire"
msgid "search"
msgstr "Søgning"
msgid "web"
msgstr "Web"
msgid "image"
msgstr "Billede"
msgid "images"
msgstr "Billeder"
msgid "video"
msgstr "Video"
msgid "videos"
msgstr "Videoer"
msgid "forum"
msgstr "Forum"
msgid "forums"
msgstr "Fora"
msgid "map"
msgstr "Kort"
msgid "maps"
msgstr "Kort"
msgid "file"
msgstr "Fil"
msgid "torrents"
msgstr "Torrenter"
msgid "searching_for_new_results"
msgstr "Søger efter nye resultater..."
msgid "previous"
msgstr "Forrige"
msgid "next"
msgstr "Næste"
msgid "fetched_in"
msgstr "Hentet på %s sekunder"
msgid "sort_seeders"
msgstr "Sorter efter seeders"
msgid "sort_leechers"
msgstr "Sorter efter leechers"
msgid "sort_lth"
msgstr "Størrelse (lav til høj)"
msgid "sort_htl"
msgstr "Størrelse (høj til lav)"
msgid "category_all"
msgstr "Alle kategorier"
msgid "category_movie"
msgstr "Film"
msgid "category_audiobook"
msgstr "Lydbøger"
msgid "category_tv"
msgstr "Tv-serier"
msgid "category_games"
msgstr "Spil"
msgid "category_software"
msgstr "Software"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Musik"
msgid "category_xxx"
msgstr "XXX (voksenindhold)"
msgid "apply_settings"
msgstr "Anvend indstillinger"
msgid "error"
msgstr "Fejl"
msgid "views"
msgstr "Visninger"
msgid "seeders"
msgstr "Seeders"
msgid "leechers"
msgstr "Leechers"
msgid "no_results_found"
msgstr "Din søgning '%s' gav ingen resultater."
msgid "suggest_rephrase"
msgstr "Prøv at omformulere eller rette fejl."
msgid "streets"
msgstr "Gader"
msgid "satellite"
msgstr "Satellit"
msgid "esri_satellite"
msgstr "ESRI Satellit"
msgid "topographic"
msgstr "Topografisk"
msgid "locate_me"
msgstr "Find min placering"
msgid "you_are_within"
msgstr "Du er inden for "
msgid "meters_from_point"
msgstr "meter fra dette punkt"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Einstellungen"
msgid "settings"
msgstr "Einstellungen"
msgid "theme"
msgstr "Thema"
msgid "theme_dark"
msgstr "Dunkel"
msgid "theme_light"
msgstr "Hell"
msgid "theme_night"
msgstr "Nacht"
msgid "theme_black"
msgstr "Schwarz"
msgid "theme_mocha"
msgstr "Mokka"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Sichere Suche"
msgid "off"
msgstr "Aus"
msgid "on"
msgstr "An"
msgid "site_language"
msgstr "Website-Sprache"
msgid "search_language"
msgstr "Suchsprache"
msgid "any_language"
msgstr "Beliebige Sprache"
msgid "no_results"
msgstr "Keine Ergebnisse für '%s' gefunden. Versuchen Sie es mit anderen Suchbegriffen."
msgid "no_more_results"
msgstr "Das scheint das Ende der Ergebnisse zu sein."
msgid "safe_search_off"
msgstr "Sichere Suche ist deaktiviert"
msgid "safe_search_on"
msgstr "Sichere Suche ist aktiviert"
msgid "save_settings"
msgstr "Einstellungen speichern"
msgid "all_settings"
msgstr "Alle Einstellungen"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Privat und Offen"
msgid "site_tags"
msgstr "Suchmaschine, Q-Gato, Spitfire"
msgid "search"
msgstr "Suche"
msgid "web"
msgstr "Web"
msgid "image"
msgstr "Bild"
msgid "images"
msgstr "Bilder"
msgid "video"
msgstr "Video"
msgid "videos"
msgstr "Videos"
msgid "forum"
msgstr "Forum"
msgid "forums"
msgstr "Foren"
msgid "map"
msgstr "Karte"
msgid "maps"
msgstr "Karten"
msgid "file"
msgstr "Datei"
msgid "torrents"
msgstr "Torrents"
msgid "searching_for_new_results"
msgstr "Suche nach neuen Ergebnissen..."
msgid "previous"
msgstr "Vorherige"
msgid "next"
msgstr "Nächste"
msgid "fetched_in"
msgstr "Abgerufen in %s Sekunden"
msgid "sort_seeders"
msgstr "Sortieren nach Seeders"
msgid "sort_leechers"
msgstr "Sortieren nach Leechers"
msgid "sort_lth"
msgstr "Größe (aufsteigend)"
msgid "sort_htl"
msgstr "Größe (absteigend)"
msgid "category_all"
msgstr "Alle Kategorien"
msgid "category_movie"
msgstr "Filme"
msgid "category_audiobook"
msgstr "Hörbücher"
msgid "category_tv"
msgstr "TV-Serien"
msgid "category_games"
msgstr "Spiele"
msgid "category_software"
msgstr "Software"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Musik"
msgid "category_xxx"
msgstr "XXX (Erwachsene)"
msgid "apply_settings"
msgstr "Einstellungen übernehmen"
msgid "error"
msgstr "Fehler"
msgid "views"
msgstr "Ansichten"
msgid "seeders"
msgstr "Seeders"
msgid "leechers"
msgstr "Leechers"
msgid "no_results_found"
msgstr "Ihre Suche nach '%s' hat keine Ergebnisse geliefert."
msgid "suggest_rephrase"
msgstr "Versuchen Sie, die Anfrage neu zu formulieren oder Fehler zu korrigieren."
msgid "streets"
msgstr "Straßen"
msgid "satellite"
msgstr "Satellit"
msgid "esri_satellite"
msgstr "ESRI-Satellit"
msgid "topographic"
msgstr "Topographisch"
msgid "locate_me"
msgstr "Finde meinen Standort"
msgid "you_are_within"
msgstr "Sie befinden sich innerhalb von "
msgid "meters_from_point"
msgstr "Metern von diesem Punkt entfernt"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Ρυθμίσεις"
msgid "settings"
msgstr "Ρυθμίσεις"
msgid "theme"
msgstr "Θέμα"
msgid "theme_dark"
msgstr "Σκοτεινό"
msgid "theme_light"
msgstr "Φωτεινό"
msgid "theme_night"
msgstr "Νυχτερινό"
msgid "theme_black"
msgstr "Μαύρο"
msgid "theme_mocha"
msgstr "Μόκα"
msgid "theme_latte"
msgstr "Λάτε"
msgid "safe_search"
msgstr "Ασφαλής αναζήτηση"
msgid "off"
msgstr "Απενεργοποιημένο"
msgid "on"
msgstr "Ενεργοποιημένο"
msgid "site_language"
msgstr "Γλώσσα ιστότοπου"
msgid "search_language"
msgstr "Γλώσσα αναζήτησης"
msgid "any_language"
msgstr "Οποιαδήποτε γλώσσα"
msgid "no_results"
msgstr "Δεν βρέθηκαν αποτελέσματα για '%s'. Δοκιμάστε άλλες λέξεις-κλειδιά."
msgid "no_more_results"
msgstr "Φαίνεται ότι αυτά είναι όλα τα αποτελέσματα."
msgid "safe_search_off"
msgstr "Η ασφαλής αναζήτηση είναι απενεργοποιημένη"
msgid "safe_search_on"
msgstr "Η ασφαλής αναζήτηση είναι ενεργοποιημένη"
msgid "save_settings"
msgstr "Αποθήκευση ρυθμίσεων"
msgid "all_settings"
msgstr "Όλες οι ρυθμίσεις"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Ιδιωτικό και Ανοιχτό"
msgid "site_tags"
msgstr "Μηχανή αναζήτησης, Q-Gato, Spitfire"
msgid "search"
msgstr "Αναζήτηση"
msgid "web"
msgstr "Ιστός"
msgid "image"
msgstr "Εικόνα"
msgid "images"
msgstr "Εικόνες"
msgid "video"
msgstr "Βίντεο"
msgid "videos"
msgstr "Βίντεο"
msgid "forum"
msgstr "Φόρουμ"
msgid "forums"
msgstr "Φόρουμ"
msgid "map"
msgstr "Χάρτης"
msgid "maps"
msgstr "Χάρτες"
msgid "file"
msgstr "Αρχείο"
msgid "torrents"
msgstr "Torrents"
msgid "searching_for_new_results"
msgstr "Αναζήτηση νέων αποτελεσμάτων..."
msgid "previous"
msgstr "Προηγούμενο"
msgid "next"
msgstr "Επόμενο"
msgid "fetched_in"
msgstr "Ανακτήθηκε σε %s δευτερόλεπτα"
msgid "sort_seeders"
msgstr "Ταξινόμηση κατά seeders"
msgid "sort_leechers"
msgstr "Ταξινόμηση κατά leechers"
msgid "sort_lth"
msgstr "Μέγεθος (μικρό σε μεγάλο)"
msgid "sort_htl"
msgstr "Μέγεθος (μεγάλο σε μικρό)"
msgid "category_all"
msgstr "Όλες οι κατηγορίες"
msgid "category_movie"
msgstr "Ταινίες"
msgid "category_audiobook"
msgstr "Ηχητικά βιβλία"
msgid "category_tv"
msgstr "Τηλεοπτικές σειρές"
msgid "category_games"
msgstr "Παιχνίδια"
msgid "category_software"
msgstr "Λογισμικό"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Μουσική"
msgid "category_xxx"
msgstr "XXX (για ενήλικες)"
msgid "apply_settings"
msgstr "Εφαρμογή ρυθμίσεων"
msgid "error"
msgstr "Σφάλμα"
msgid "views"
msgstr "Προβολές"
msgid "seeders"
msgstr "Seeders"
msgid "leechers"
msgstr "Leechers"
msgid "no_results_found"
msgstr "Η αναζήτησή σας για '%s' δεν έφερε αποτελέσματα."
msgid "suggest_rephrase"
msgstr "Προσπαθήστε να αναδιατυπώσετε ή να διορθώσετε τυχόν λάθη."
msgid "streets"
msgstr "Δρόμοι"
msgid "satellite"
msgstr "Δορυφόρος"
msgid "esri_satellite"
msgstr "ESRI Δορυφόρος"
msgid "topographic"
msgstr "Τοπογραφικός"
msgid "locate_me"
msgstr "Εντοπισμός θέσης μου"
msgid "you_are_within"
msgstr "Βρίσκεστε εντός "
msgid "meters_from_point"
msgstr "μέτρων από αυτό το σημείο"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Agordoj"
msgid "settings"
msgstr "Agordoj"
msgid "theme"
msgstr "Temo"
msgid "theme_dark"
msgstr "Malhela"
msgid "theme_light"
msgstr "Helera"
msgid "theme_night"
msgstr "Nokta"
msgid "theme_black"
msgstr "Nigra"
msgid "theme_mocha"
msgstr "Moĉa"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Sekura serĉo"
msgid "off"
msgstr "Malŝaltita"
msgid "on"
msgstr "Ŝaltita"
msgid "site_language"
msgstr "Reteja lingvo"
msgid "search_language"
msgstr "Serĉa lingvo"
msgid "any_language"
msgstr "Ajna lingvo"
msgid "no_results"
msgstr "Neniuj rezultoj trovitaj por '%s'. Provu aliajn ŝlosilvortojn."
msgid "no_more_results"
msgstr "Ŝajnas esti la fino de la rezultoj."
msgid "safe_search_off"
msgstr "Sekura serĉo estas malŝaltita"
msgid "safe_search_on"
msgstr "Sekura serĉo estas ŝaltita"
msgid "save_settings"
msgstr "Konservi agordojn"
msgid "all_settings"
msgstr "Ĉiuj agordoj"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Privata kaj Malferma"
msgid "site_tags"
msgstr "Serĉilo, Q-Gato, Spitfire"
msgid "search"
msgstr "Serĉo"
msgid "web"
msgstr "Reto"
msgid "image"
msgstr "Bildo"
msgid "images"
msgstr "Bildoj"
msgid "video"
msgstr "Video"
msgid "videos"
msgstr "Videoj"
msgid "forum"
msgstr "Forumo"
msgid "forums"
msgstr "Forumoj"
msgid "map"
msgstr "Mapo"
msgid "maps"
msgstr "Mapoj"
msgid "file"
msgstr "Dosiero"
msgid "torrents"
msgstr "Torentoj"
msgid "searching_for_new_results"
msgstr "Serĉante novajn rezultojn..."
msgid "previous"
msgstr "Antaŭa"
msgid "next"
msgstr "Sekva"
msgid "fetched_in"
msgstr "Prenita en %s sekundoj"
msgid "sort_seeders"
msgstr "Ordigi laŭ semantoj"
msgid "sort_leechers"
msgstr "Ordigi laŭ elŝutantoj"
msgid "sort_lth"
msgstr "Grando (de malgranda al granda)"
msgid "sort_htl"
msgstr "Grando (de granda al malgranda)"
msgid "category_all"
msgstr "Ĉiuj kategorioj"
msgid "category_movie"
msgstr "Filmoj"
msgid "category_audiobook"
msgstr "Aŭdlibroj"
msgid "category_tv"
msgstr "Televidserioj"
msgid "category_games"
msgstr "Ludoj"
msgid "category_software"
msgstr "Programaro"
msgid "category_anime"
msgstr "Animeo"
msgid "category_music"
msgstr "Muziko"
msgid "category_xxx"
msgstr "XXX (plenkreska enhavo)"
msgid "apply_settings"
msgstr "Apliki agordojn"
msgid "error"
msgstr "Eraro"
msgid "views"
msgstr "Rigardoj"
msgid "seeders"
msgstr "Semantoj"
msgid "leechers"
msgstr "Elŝutantoj"
msgid "no_results_found"
msgstr "Via serĉo '%s' ne trovis rezultojn."
msgid "suggest_rephrase"
msgstr "Provu reformuli aŭ korekti erarojn."
msgid "streets"
msgstr "Stratoj"
msgid "satellite"
msgstr "Satelito"
msgid "esri_satellite"
msgstr "ESRI Satelito"
msgid "topographic"
msgstr "Topografia"
msgid "locate_me"
msgstr "Trovu mian lokon"
msgid "you_are_within"
msgstr "Vi estas ene de "
msgid "meters_from_point"
msgstr "metroj de ĉi tiu punkto"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Configuración"
msgid "settings"
msgstr "Configuración"
msgid "theme"
msgstr "Tema"
msgid "theme_dark"
msgstr "Oscuro"
msgid "theme_light"
msgstr "Claro"
msgid "theme_night"
msgstr "Nocturno"
msgid "theme_black"
msgstr "Negro"
msgid "theme_mocha"
msgstr "Moca"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Búsqueda segura"
msgid "off"
msgstr "Desactivado"
msgid "on"
msgstr "Activado"
msgid "site_language"
msgstr "Idioma del sitio"
msgid "search_language"
msgstr "Idioma de búsqueda"
msgid "any_language"
msgstr "Cualquier idioma"
msgid "no_results"
msgstr "No se encontraron resultados para '%s'. Intenta con otras palabras clave."
msgid "no_more_results"
msgstr "Parece que estos son todos los resultados."
msgid "safe_search_off"
msgstr "Búsqueda segura está desactivada"
msgid "safe_search_on"
msgstr "Búsqueda segura está activada"
msgid "save_settings"
msgstr "Guardar configuración"
msgid "all_settings"
msgstr "Todas las configuraciones"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Privado y Abierto"
msgid "site_tags"
msgstr "Motor de búsqueda, Q-Gato, Spitfire"
msgid "search"
msgstr "Buscar"
msgid "web"
msgstr "Web"
msgid "image"
msgstr "Imagen"
msgid "images"
msgstr "Imágenes"
msgid "video"
msgstr "Video"
msgid "videos"
msgstr "Videos"
msgid "forum"
msgstr "Foro"
msgid "forums"
msgstr "Foros"
msgid "map"
msgstr "Mapa"
msgid "maps"
msgstr "Mapas"
msgid "file"
msgstr "Archivo"
msgid "torrents"
msgstr "Torrents"
msgid "searching_for_new_results"
msgstr "Buscando nuevos resultados..."
msgid "previous"
msgstr "Anterior"
msgid "next"
msgstr "Siguiente"
msgid "fetched_in"
msgstr "Obtenido en %s segundos"
msgid "sort_seeders"
msgstr "Ordenar por seeders"
msgid "sort_leechers"
msgstr "Ordenar por leechers"
msgid "sort_lth"
msgstr "Tamaño (de menor a mayor)"
msgid "sort_htl"
msgstr "Tamaño (de mayor a menor)"
msgid "category_all"
msgstr "Todas las categorías"
msgid "category_movie"
msgstr "Películas"
msgid "category_audiobook"
msgstr "Audiolibros"
msgid "category_tv"
msgstr "Series de TV"
msgid "category_games"
msgstr "Juegos"
msgid "category_software"
msgstr "Software"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Música"
msgid "category_xxx"
msgstr "XXX (adultos)"
msgid "apply_settings"
msgstr "Aplicar configuración"
msgid "error"
msgstr "Error"
msgid "views"
msgstr "Vistas"
msgid "seeders"
msgstr "Seeders"
msgid "leechers"
msgstr "Leechers"
msgid "no_results_found"
msgstr "Tu búsqueda de '%s' no produjo resultados."
msgid "suggest_rephrase"
msgstr "Intenta reformular o corregir errores."
msgid "streets"
msgstr "Calles"
msgid "satellite"
msgstr "Satélite"
msgid "esri_satellite"
msgstr "Satélite ESRI"
msgid "topographic"
msgstr "Topográfico"
msgid "locate_me"
msgstr "Ubicarme"
msgid "you_are_within"
msgstr "Estás dentro de "
msgid "meters_from_point"
msgstr "metros de este punto"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Seaded"
msgid "settings"
msgstr "Seaded"
msgid "theme"
msgstr "Teema"
msgid "theme_dark"
msgstr "Tume"
msgid "theme_light"
msgstr "Hele"
msgid "theme_night"
msgstr "Öine"
msgid "theme_black"
msgstr "Must"
msgid "theme_mocha"
msgstr "Mocha"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Turvaline otsing"
msgid "off"
msgstr "Väljas"
msgid "on"
msgstr "Sees"
msgid "site_language"
msgstr "Veebisaidi keel"
msgid "search_language"
msgstr "Otsingu keel"
msgid "any_language"
msgstr "Ükskõik milline keel"
msgid "no_results"
msgstr "Tulemusi ei leitud päringule '%s'. Proovi teisi märksõnu."
msgid "no_more_results"
msgstr "Tundub, et see on tulemuste lõpp."
msgid "safe_search_off"
msgstr "Turvaline otsing on väljas"
msgid "safe_search_on"
msgstr "Turvaline otsing on sees"
msgid "save_settings"
msgstr "Salvesta seaded"
msgid "all_settings"
msgstr "Kõik seaded"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Privaatne ja Avatud"
msgid "site_tags"
msgstr "Otsingumootor, Q-Gato, Spitfire"
msgid "search"
msgstr "Otsing"
msgid "web"
msgstr "Veeb"
msgid "image"
msgstr "Pilt"
msgid "images"
msgstr "Pildid"
msgid "video"
msgstr "Video"
msgid "videos"
msgstr "Videod"
msgid "forum"
msgstr "Foorum"
msgid "forums"
msgstr "Foorumid"
msgid "map"
msgstr "Kaart"
msgid "maps"
msgstr "Kaardid"
msgid "file"
msgstr "Fail"
msgid "torrents"
msgstr "Torrendid"
msgid "searching_for_new_results"
msgstr "Otsitakse uusi tulemusi..."
msgid "previous"
msgstr "Eelmine"
msgid "next"
msgstr "Järgmine"
msgid "fetched_in"
msgstr "Laaditud %s sekundiga"
msgid "sort_seeders"
msgstr "Sorteeri külvajate järgi"
msgid "sort_leechers"
msgstr "Sorteeri laadijate järgi"
msgid "sort_lth"
msgstr "Suurus (väike kuni suur)"
msgid "sort_htl"
msgstr "Suurus (suur kuni väike)"
msgid "category_all"
msgstr "Kõik kategooriad"
msgid "category_movie"
msgstr "Filmid"
msgid "category_audiobook"
msgstr "Audioraamatud"
msgid "category_tv"
msgstr "Telesarjad"
msgid "category_games"
msgstr "Mängud"
msgid "category_software"
msgstr "Tarkvara"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Muusika"
msgid "category_xxx"
msgstr "XXX (täiskasvanutele)"
msgid "apply_settings"
msgstr "Rakenda seaded"
msgid "error"
msgstr "Viga"
msgid "views"
msgstr "Vaated"
msgid "seeders"
msgstr "Külvajad"
msgid "leechers"
msgstr "Laadijad"
msgid "no_results_found"
msgstr "Teie päring '%s' ei andnud tulemusi."
msgid "suggest_rephrase"
msgstr "Proovige ümber sõnastada või vigu parandada."
msgid "streets"
msgstr "Tänavad"
msgid "satellite"
msgstr "Satelliit"
msgid "esri_satellite"
msgstr "ESRI Satelliit"
msgid "topographic"
msgstr "Topograafiline"
msgid "locate_me"
msgstr "Leia mu asukoht"
msgid "you_are_within"
msgstr "Olete "
msgid "meters_from_point"
msgstr "meetri kaugusel sellest punktist"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "تنظیمات"
msgid "settings"
msgstr "تنظیمات"
msgid "theme"
msgstr "تم"
msgid "theme_dark"
msgstr "تاریک"
msgid "theme_light"
msgstr "روشن"
msgid "theme_night"
msgstr "شبانه"
msgid "theme_black"
msgstr "سیاه"
msgid "theme_mocha"
msgstr "موکا"
msgid "theme_latte"
msgstr "لاته"
msgid "safe_search"
msgstr "جستجوی ایمن"
msgid "off"
msgstr "خاموش"
msgid "on"
msgstr "روشن"
msgid "site_language"
msgstr "زبان سایت"
msgid "search_language"
msgstr "زبان جستجو"
msgid "any_language"
msgstr "هر زبانی"
msgid "no_results"
msgstr "هیچ نتیجه‌ای برای '%s' یافت نشد. کلمات کلیدی دیگری را امتحان کنید."
msgid "no_more_results"
msgstr "به نظر می‌رسد این پایان نتایج است."
msgid "safe_search_off"
msgstr "جستجوی ایمن خاموش است"
msgid "safe_search_on"
msgstr "جستجوی ایمن روشن است"
msgid "save_settings"
msgstr "ذخیره تنظیمات"
msgid "all_settings"
msgstr "تمام تنظیمات"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - خصوصی و باز"
msgid "site_tags"
msgstr "موتور جستجو، Q-Gato، Spitfire"
msgid "search"
msgstr "جستجو"
msgid "web"
msgstr "وب"
msgid "image"
msgstr "تصویر"
msgid "images"
msgstr "تصاویر"
msgid "video"
msgstr "ویدیو"
msgid "videos"
msgstr "ویدیوها"
msgid "forum"
msgstr "انجمن"
msgid "forums"
msgstr "انجمن‌ها"
msgid "map"
msgstr "نقشه"
msgid "maps"
msgstr "نقشه‌ها"
msgid "file"
msgstr "فایل"
msgid "torrents"
msgstr "تورنت‌ها"
msgid "searching_for_new_results"
msgstr "در حال جستجوی نتایج جدید..."
msgid "previous"
msgstr "قبلی"
msgid "next"
msgstr "بعدی"
msgid "fetched_in"
msgstr "بازیابی شده در %s ثانیه"
msgid "sort_seeders"
msgstr "مرتب‌سازی بر اساس سیدرها"
msgid "sort_leechers"
msgstr "مرتب‌سازی بر اساس لیچرها"
msgid "sort_lth"
msgstr "اندازه (کوچک به بزرگ)"
msgid "sort_htl"
msgstr "اندازه (بزرگ به کوچک)"
msgid "category_all"
msgstr "تمام دسته‌ها"
msgid "category_movie"
msgstr "فیلم‌ها"
msgid "category_audiobook"
msgstr "کتاب‌های صوتی"
msgid "category_tv"
msgstr "مجموعه‌های تلویزیونی"
msgid "category_games"
msgstr "بازی‌ها"
msgid "category_software"
msgstr "نرم‌افزار"
msgid "category_anime"
msgstr "انیمه"
msgid "category_music"
msgstr "موسیقی"
msgid "category_xxx"
msgstr "XXX (بزرگسالان)"
msgid "apply_settings"
msgstr "اعمال تنظیمات"
msgid "error"
msgstr "خطا"
msgid "views"
msgstr "بازدیدها"
msgid "seeders"
msgstr "سیدرها"
msgid "leechers"
msgstr "لیچرها"
msgid "no_results_found"
msgstr "جستجوی شما برای '%s' نتیجه‌ای نداشت."
msgid "suggest_rephrase"
msgstr "سعی کنید مجدداً عبارت را بازنویسی کنید یا خطاها را اصلاح کنید."
msgid "streets"
msgstr "خیابان‌ها"
msgid "satellite"
msgstr "ماهواره"
msgid "esri_satellite"
msgstr "ماهواره ESRI"
msgid "topographic"
msgstr "توپوگرافی"
msgid "locate_me"
msgstr "مکان من را پیدا کن"
msgid "you_are_within"
msgstr "شما در فاصله "
msgid "meters_from_point"
msgstr "متری از این نقطه قرار دارید"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Asetukset"
msgid "settings"
msgstr "Asetukset"
msgid "theme"
msgstr "Teema"
msgid "theme_dark"
msgstr "Tumma"
msgid "theme_light"
msgstr "Vaalea"
msgid "theme_night"
msgstr "Yö"
msgid "theme_black"
msgstr "Musta"
msgid "theme_mocha"
msgstr "Mokka"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Turvallinen haku"
msgid "off"
msgstr "Pois"
msgid "on"
msgstr "Päällä"
msgid "site_language"
msgstr "Verkkosivun kieli"
msgid "search_language"
msgstr "Hakukieli"
msgid "any_language"
msgstr "Mikä tahansa kieli"
msgid "no_results"
msgstr "Hakutuloksia '%s' ei löytynyt. Kokeile toisia hakusanoja."
msgid "no_more_results"
msgstr "Näyttää siltä, että tässä ovat kaikki tulokset."
msgid "safe_search_off"
msgstr "Turvallinen haku on pois päältä"
msgid "safe_search_on"
msgstr "Turvallinen haku on päällä"
msgid "save_settings"
msgstr "Tallenna asetukset"
msgid "all_settings"
msgstr "Kaikki asetukset"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Yksityinen ja Avoin"
msgid "site_tags"
msgstr "Hakukone, Q-Gato, Spitfire"
msgid "search"
msgstr "Haku"
msgid "web"
msgstr "Verkko"
msgid "image"
msgstr "Kuva"
msgid "images"
msgstr "Kuvat"
msgid "video"
msgstr "Video"
msgid "videos"
msgstr "Videot"
msgid "forum"
msgstr "Foorumi"
msgid "forums"
msgstr "Foorumit"
msgid "map"
msgstr "Kartta"
msgid "maps"
msgstr "Kartat"
msgid "file"
msgstr "Tiedosto"
msgid "torrents"
msgstr "Torrentit"
msgid "searching_for_new_results"
msgstr "Haetaan uusia tuloksia..."
msgid "previous"
msgstr "Edellinen"
msgid "next"
msgstr "Seuraava"
msgid "fetched_in"
msgstr "Haettu %s sekunnissa"
msgid "sort_seeders"
msgstr "Lajittele lähettäjien mukaan"
msgid "sort_leechers"
msgstr "Lajittele vastaanottajien mukaan"
msgid "sort_lth"
msgstr "Koko (pienestä suureen)"
msgid "sort_htl"
msgstr "Koko (suuresta pieneen)"
msgid "category_all"
msgstr "Kaikki kategoriat"
msgid "category_movie"
msgstr "Elokuvat"
msgid "category_audiobook"
msgstr "Äänikirjat"
msgid "category_tv"
msgstr "TV-sarjat"
msgid "category_games"
msgstr "Pelit"
msgid "category_software"
msgstr "Ohjelmistot"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Musiikki"
msgid "category_xxx"
msgstr "XXX (aikuisille)"
msgid "apply_settings"
msgstr "Käytä asetuksia"
msgid "error"
msgstr "Virhe"
msgid "views"
msgstr "Näytöt"
msgid "seeders"
msgstr "Lähettäjät"
msgid "leechers"
msgstr "Vastaanottajat"
msgid "no_results_found"
msgstr "Hakusi '%s' ei tuottanut tuloksia."
msgid "suggest_rephrase"
msgstr "Kokeile muotoilla uudelleen tai korjaa virheet."
msgid "streets"
msgstr "Kadut"
msgid "satellite"
msgstr "Satelliitti"
msgid "esri_satellite"
msgstr "ESRI Satelliitti"
msgid "topographic"
msgstr "Topografinen"
msgid "locate_me"
msgstr "Sijaintini"
msgid "you_are_within"
msgstr "Olet "
msgid "meters_from_point"
msgstr "metrin päässä tästä pisteestä"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Paramètres"
msgid "settings"
msgstr "Paramètres"
msgid "theme"
msgstr "Thème"
msgid "theme_dark"
msgstr "Sombre"
msgid "theme_light"
msgstr "Clair"
msgid "theme_night"
msgstr "Nuit"
msgid "theme_black"
msgstr "Noir"
msgid "theme_mocha"
msgstr "Moka"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Recherche sécurisée"
msgid "off"
msgstr "Désactivé"
msgid "on"
msgstr "Activé"
msgid "site_language"
msgstr "Langue du site"
msgid "search_language"
msgstr "Langue de recherche"
msgid "any_language"
msgstr "N'importe quelle langue"
msgid "no_results"
msgstr "Aucun résultat trouvé pour '%s'. Essayez d'autres mots-clés."
msgid "no_more_results"
msgstr "Il semble que ce soit la fin des résultats."
msgid "safe_search_off"
msgstr "Recherche sécurisée désactivée"
msgid "safe_search_on"
msgstr "Recherche sécurisée activée"
msgid "save_settings"
msgstr "Enregistrer les paramètres"
msgid "all_settings"
msgstr "Tous les paramètres"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Privé et Ouvert"
msgid "site_tags"
msgstr "Moteur de recherche, Q-Gato, Spitfire"
msgid "search"
msgstr "Recherche"
msgid "web"
msgstr "Web"
msgid "image"
msgstr "Image"
msgid "images"
msgstr "Images"
msgid "video"
msgstr "Vidéo"
msgid "videos"
msgstr "Vidéos"
msgid "forum"
msgstr "Forum"
msgid "forums"
msgstr "Forums"
msgid "map"
msgstr "Carte"
msgid "maps"
msgstr "Cartes"
msgid "file"
msgstr "Fichier"
msgid "torrents"
msgstr "Torrents"
msgid "searching_for_new_results"
msgstr "Recherche de nouveaux résultats..."
msgid "previous"
msgstr "Précédent"
msgid "next"
msgstr "Suivant"
msgid "fetched_in"
msgstr "Récupéré en %s secondes"
msgid "sort_seeders"
msgstr "Trier par seeders"
msgid "sort_leechers"
msgstr "Trier par leechers"
msgid "sort_lth"
msgstr "Taille (croissante)"
msgid "sort_htl"
msgstr "Taille (décroissante)"
msgid "category_all"
msgstr "Toutes les catégories"
msgid "category_movie"
msgstr "Films"
msgid "category_audiobook"
msgstr "Livres audio"
msgid "category_tv"
msgstr "Séries TV"
msgid "category_games"
msgstr "Jeux"
msgid "category_software"
msgstr "Logiciels"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Musique"
msgid "category_xxx"
msgstr "XXX (adulte)"
msgid "apply_settings"
msgstr "Appliquer les paramètres"
msgid "error"
msgstr "Erreur"
msgid "views"
msgstr "Vues"
msgid "seeders"
msgstr "Seeders"
msgid "leechers"
msgstr "Leechers"
msgid "no_results_found"
msgstr "Votre recherche '%s' n'a retourné aucun résultat."
msgid "suggest_rephrase"
msgstr "Essayez de reformuler ou de corriger les erreurs."
msgid "streets"
msgstr "Rues"
msgid "satellite"
msgstr "Satellite"
msgid "esri_satellite"
msgstr "Satellite ESRI"
msgid "topographic"
msgstr "Topographique"
msgid "locate_me"
msgstr "Localisez-moi"
msgid "you_are_within"
msgstr "Vous êtes à "
msgid "meters_from_point"
msgstr "mètres de ce point"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "सेटिंग्स"
msgid "settings"
msgstr "सेटिंग्स"
msgid "theme"
msgstr "थीम"
msgid "theme_dark"
msgstr "डार्क"
msgid "theme_light"
msgstr "लाइट"
msgid "theme_night"
msgstr "नाइट"
msgid "theme_black"
msgstr "ब्लैक"
msgid "theme_mocha"
msgstr "मोचा"
msgid "theme_latte"
msgstr "लाटे"
msgid "safe_search"
msgstr "सुरक्षित खोज"
msgid "off"
msgstr "बंद"
msgid "on"
msgstr "चालू"
msgid "site_language"
msgstr "साइट भाषा"
msgid "search_language"
msgstr "खोज भाषा"
msgid "any_language"
msgstr "कोई भी भाषा"
msgid "no_results"
msgstr "'%s' के लिए कोई परिणाम नहीं मिला। कृपया अन्य कीवर्ड आज़माएं।"
msgid "no_more_results"
msgstr "ऐसा लगता है कि यह परिणामों का अंत है।"
msgid "safe_search_off"
msgstr "सुरक्षित खोज बंद है"
msgid "safe_search_on"
msgstr "सुरक्षित खोज चालू है"
msgid "save_settings"
msgstr "सेटिंग्स सहेजें"
msgid "all_settings"
msgstr "सभी सेटिंग्स"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - निजी और खुला"
msgid "site_tags"
msgstr "सर्च इंजन, Q-Gato, Spitfire"
msgid "search"
msgstr "खोज"
msgid "web"
msgstr "वेब"
msgid "image"
msgstr "छवि"
msgid "images"
msgstr "छवियाँ"
msgid "video"
msgstr "वीडियो"
msgid "videos"
msgstr "वीडियो"
msgid "forum"
msgstr "फोरम"
msgid "forums"
msgstr "फोरम"
msgid "map"
msgstr "नक्शा"
msgid "maps"
msgstr "नक्शे"
msgid "file"
msgstr "फाइल"
msgid "torrents"
msgstr "टोरेंट्स"
msgid "searching_for_new_results"
msgstr "नए परिणामों की खोज कर रहे हैं..."
msgid "previous"
msgstr "पिछला"
msgid "next"
msgstr "अगला"
msgid "fetched_in"
msgstr "%s सेकंड में प्राप्त किया गया"
msgid "sort_seeders"
msgstr "सीडर्स के अनुसार छांटें"
msgid "sort_leechers"
msgstr "लीचर्स के अनुसार छांटें"
msgid "sort_lth"
msgstr "आकार (छोटा से बड़ा)"
msgid "sort_htl"
msgstr "आकार (बड़ा से छोटा)"
msgid "category_all"
msgstr "सभी श्रेणियाँ"
msgid "category_movie"
msgstr "फिल्में"
msgid "category_audiobook"
msgstr "ऑडियोबुक्स"
msgid "category_tv"
msgstr "टीवी सीरीज"
msgid "category_games"
msgstr "गेम्स"
msgid "category_software"
msgstr "सॉफ्टवेयर"
msgid "category_anime"
msgstr "एनीमे"
msgid "category_music"
msgstr "संगीत"
msgid "category_xxx"
msgstr "XXX (वयस्कों के लिए)"
msgid "apply_settings"
msgstr "सेटिंग्स लागू करें"
msgid "error"
msgstr "त्रुटि"
msgid "views"
msgstr "दृश्य"
msgid "seeders"
msgstr "सीडर्स"
msgid "leechers"
msgstr "लीचर्स"
msgid "no_results_found"
msgstr "आपकी '%s' खोज का कोई परिणाम नहीं मिला।"
msgid "suggest_rephrase"
msgstr "पुनः वाक्य रचना करने या त्रुटियों को ठीक करने का प्रयास करें।"
msgid "streets"
msgstr "सड़कें"
msgid "satellite"
msgstr "सैटेलाइट"
msgid "esri_satellite"
msgstr "ESRI सैटेलाइट"
msgid "topographic"
msgstr "टोपोग्राफिक"
msgid "locate_me"
msgstr "मेरा स्थान ढूंढें"
msgid "you_are_within"
msgstr "आप यहाँ हैं: "
msgid "meters_from_point"
msgstr "मीटर इस बिंदु से दूर"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Postavke"
msgid "settings"
msgstr "Postavke"
msgid "theme"
msgstr "Tema"
msgid "theme_dark"
msgstr "Tamna"
msgid "theme_light"
msgstr "Svijetla"
msgid "theme_night"
msgstr "Noćna"
msgid "theme_black"
msgstr "Crna"
msgid "theme_mocha"
msgstr "Mocha"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Sigurno pretraživanje"
msgid "off"
msgstr "Isključeno"
msgid "on"
msgstr "Uključeno"
msgid "site_language"
msgstr "Jezik stranice"
msgid "search_language"
msgstr "Jezik pretraživanja"
msgid "any_language"
msgstr "Bilo koji jezik"
msgid "no_results"
msgstr "Za vaš upit '%s' nisu pronađeni rezultati. Pokušajte s drugim ključnim riječima."
msgid "no_more_results"
msgstr "Čini se da ste stigli do kraja rezultata."
msgid "safe_search_off"
msgstr "Sigurno pretraživanje je isključeno"
msgid "safe_search_on"
msgstr "Sigurno pretraživanje je uključeno"
msgid "save_settings"
msgstr "Spremi postavke"
msgid "all_settings"
msgstr "Sve postavke"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Privatno i otvoreno"
msgid "site_tags"
msgstr "Tražilica, Q-Gato, Spitfire"
msgid "search"
msgstr "Pretraživanje"
msgid "web"
msgstr "Web"
msgid "image"
msgstr "Slika"
msgid "images"
msgstr "Slike"
msgid "video"
msgstr "Video"
msgid "videos"
msgstr "Videozapisi"
msgid "forum"
msgstr "Forum"
msgid "forums"
msgstr "Forumi"
msgid "map"
msgstr "Karta"
msgid "maps"
msgstr "Karte"
msgid "file"
msgstr "Datoteka"
msgid "torrents"
msgstr "Torrenti"
msgid "searching_for_new_results"
msgstr "Traže se novi rezultati..."
msgid "previous"
msgstr "Prethodno"
msgid "next"
msgstr "Sljedeće"
msgid "fetched_in"
msgstr "Dohvaćeno za %s sekundi"
msgid "sort_seeders"
msgstr "Sjeme (najviše)"
msgid "sort_leechers"
msgstr "Preuzimanje (najviše)"
msgid "sort_lth"
msgstr "Veličina (od najmanjeg)"
msgid "sort_htl"
msgstr "Veličina (od najvećeg)"
msgid "category_all"
msgstr "Sve kategorije"
msgid "category_movie"
msgstr "Filmovi"
msgid "category_audiobook"
msgstr "Audioknjige"
msgid "category_tv"
msgstr "TV serije"
msgid "category_games"
msgstr "Igre"
msgid "category_software"
msgstr "Softver"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Glazba"
msgid "category_xxx"
msgstr "XXX (za odrasle)"
msgid "apply_settings"
msgstr "Primijeni postavke"
msgid "error"
msgstr "Greška"
msgid "views"
msgstr "Pregledi"
msgid "seeders"
msgstr "Sjeme (najviše)"
msgid "leechers"
msgstr "Preuzimanje (najviše)"
msgid "no_results_found"
msgstr "Vaša pretraga '%s' nije dala rezultate."
msgid "suggest_rephrase"
msgstr "Pokušajte preformulirati ili ispraviti pogreške."
msgid "streets"
msgstr "Ulice"
msgid "satellite"
msgstr "Satelit"
msgid "esri_satellite"
msgstr "ESRI Satelit"
msgid "topographic"
msgstr "Topografski"
msgid "locate_me"
msgstr "Pronađi moju lokaciju"
msgid "you_are_within"
msgstr "Nalazite se unutar "
msgid "meters_from_point"
msgstr "metara od ove točke"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Beállítások"
msgid "settings"
msgstr "Beállítások"
msgid "theme"
msgstr "Téma"
msgid "theme_dark"
msgstr "Sötét"
msgid "theme_light"
msgstr "Világos"
msgid "theme_night"
msgstr "Éjszakai"
msgid "theme_black"
msgstr "Fekete"
msgid "theme_mocha"
msgstr "Mokka"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Biztonságos keresés"
msgid "off"
msgstr "Kikapcsolva"
msgid "on"
msgstr "Bekapcsolva"
msgid "site_language"
msgstr "Weboldal nyelve"
msgid "search_language"
msgstr "Keresési nyelv"
msgid "any_language"
msgstr "Bármilyen nyelv"
msgid "no_results"
msgstr "Nem található találat a(z) '%s' keresésre. Próbáljon meg más kulcsszavakat."
msgid "no_more_results"
msgstr "Úgy tűnik, ez a találatok vége."
msgid "safe_search_off"
msgstr "A biztonságos keresés ki van kapcsolva"
msgid "safe_search_on"
msgstr "A biztonságos keresés be van kapcsolva"
msgid "save_settings"
msgstr "Beállítások mentése"
msgid "all_settings"
msgstr "Összes beállítás"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Privát és Nyitott"
msgid "site_tags"
msgstr "Keresőmotor, Q-Gato, Spitfire"
msgid "search"
msgstr "Keresés"
msgid "web"
msgstr "Web"
msgid "image"
msgstr "Kép"
msgid "images"
msgstr "Képek"
msgid "video"
msgstr "Videó"
msgid "videos"
msgstr "Videók"
msgid "forum"
msgstr "Fórum"
msgid "forums"
msgstr "Fórumok"
msgid "map"
msgstr "Térkép"
msgid "maps"
msgstr "Térképek"
msgid "file"
msgstr "Fájl"
msgid "torrents"
msgstr "Torrents"
msgid "searching_for_new_results"
msgstr "Új találatok keresése..."
msgid "previous"
msgstr "Előző"
msgid "next"
msgstr "Következő"
msgid "fetched_in"
msgstr "Lekérve %s másodperc alatt"
msgid "sort_seeders"
msgstr "Rendezés seederek szerint"
msgid "sort_leechers"
msgstr "Rendezés letöltők szerint"
msgid "sort_lth"
msgstr "Méret (kicsitől nagyig)"
msgid "sort_htl"
msgstr "Méret (nagytól kicsiig)"
msgid "category_all"
msgstr "Összes kategória"
msgid "category_movie"
msgstr "Filmek"
msgid "category_audiobook"
msgstr "Hangoskönyvek"
msgid "category_tv"
msgstr "TV sorozatok"
msgid "category_games"
msgstr "Játékok"
msgid "category_software"
msgstr "Szoftverek"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Zene"
msgid "category_xxx"
msgstr "XXX (felnőtteknek)"
msgid "apply_settings"
msgstr "Beállítások alkalmazása"
msgid "error"
msgstr "Hiba"
msgid "views"
msgstr "Megtekintések"
msgid "seeders"
msgstr "Seederek"
msgid "leechers"
msgstr "Letöltők"
msgid "no_results_found"
msgstr "A(z) '%s' keresés nem hozott találatot."
msgid "suggest_rephrase"
msgstr "Próbálja meg újrafogalmazni vagy javítsa ki a hibákat."
msgid "streets"
msgstr "Utcák"
msgid "satellite"
msgstr "Műhold"
msgid "esri_satellite"
msgstr "ESRI Műhold"
msgid "topographic"
msgstr "Topográfiai"
msgid "locate_me"
msgstr "Helymeghatározás"
msgid "you_are_within"
msgstr "Ön itt van: "
msgid "meters_from_point"
msgstr "méterre ettől a ponttól"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Կարգավորումներ"
msgid "settings"
msgstr "Կարգավորումներ"
msgid "theme"
msgstr "Թեմա"
msgid "theme_dark"
msgstr "Մութ"
msgid "theme_light"
msgstr "Լուսավոր"
msgid "theme_night"
msgstr "Գիշերային"
msgid "theme_black"
msgstr "Սև"
msgid "theme_mocha"
msgstr "Մոկա"
msgid "theme_latte"
msgstr "Լատտե"
msgid "safe_search"
msgstr "Անվտանգ որոնում"
msgid "off"
msgstr "Անջատված"
msgid "on"
msgstr "Միացված"
msgid "site_language"
msgstr "Կայքի լեզու"
msgid "search_language"
msgstr "Որոնման լեզու"
msgid "any_language"
msgstr "Ցանկացած լեզու"
msgid "no_results"
msgstr "Ձեր հարցմանը '%s' արդյունքներ չեն գտնվել։ Փորձեք այլ բանալի բառեր։"
msgid "no_more_results"
msgstr "Կարծես թե սա արդյունքների վերջն է։"
msgid "safe_search_off"
msgstr "Անվտանգ որոնումը անջատված է"
msgid "safe_search_on"
msgstr "Անվտանգ որոնումը միացված է"
msgid "save_settings"
msgstr "Պահպանել կարգավորումները"
msgid "all_settings"
msgstr "Բոլոր կարգավորումները"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Անձնական և Բաց"
msgid "site_tags"
msgstr "Որոնման համակարգ, Q-Gato, Spitfire"
msgid "search"
msgstr "Որոնում"
msgid "web"
msgstr "Ինտերնետ"
msgid "image"
msgstr "Պատկեր"
msgid "images"
msgstr "Պատկերներ"
msgid "video"
msgstr "Տեսանյութ"
msgid "videos"
msgstr "Տեսանյութեր"
msgid "forum"
msgstr "Ֆորում"
msgid "forums"
msgstr "Ֆորումներ"
msgid "map"
msgstr "Քարտեզ"
msgid "maps"
msgstr "Քարտեզներ"
msgid "file"
msgstr "Ֆայլ"
msgid "torrents"
msgstr "Թորրենտներ"
msgid "searching_for_new_results"
msgstr "Նոր արդյունքներ որոնվում են..."
msgid "previous"
msgstr "Նախորդը"
msgid "next"
msgstr "Հաջորդը"
msgid "fetched_in"
msgstr "Բեռնված է %s վայրկյանում"
msgid "sort_seeders"
msgstr "Ներբեռնում (արտահանող)"
msgid "sort_leechers"
msgstr "Ներբեռնում (ստացող)"
msgid "sort_lth"
msgstr "Չափ (փոքրից մեծ)"
msgid "sort_htl"
msgstr "Չափ (մեծից փոքր)"
msgid "category_all"
msgstr "Բոլոր կատեգորիաները"
msgid "category_movie"
msgstr "Ֆիլմեր"
msgid "category_audiobook"
msgstr "Աուդիոգրքեր"
msgid "category_tv"
msgstr "Հեռուստասերիալներ"
msgid "category_games"
msgstr "Խաղեր"
msgid "category_software"
msgstr "Ծրագրեր"
msgid "category_anime"
msgstr "Անիմե"
msgid "category_music"
msgstr "Երաժշտություն"
msgid "category_xxx"
msgstr "XXX (մեծահասակների համար)"
msgid "apply_settings"
msgstr "Կիրառել կարգավորումները"
msgid "error"
msgstr "Սխալ"
msgid "views"
msgstr "Դիտումներ"
msgid "seeders"
msgstr "Ներբեռնում (արտահանող)"
msgid "leechers"
msgstr "Ներբեռնում (ստացող)"
msgid "no_results_found"
msgstr "Ձեր '%s' որոնումը արդյունքներ չի վերադարձրել։"
msgid "suggest_rephrase"
msgstr "Փորձեք վերաշարադրել կամ ուղղել սխալները։"
msgid "streets"
msgstr "Փողոցներ"
msgid "satellite"
msgstr "Արհեստական արբանյակ"
msgid "esri_satellite"
msgstr "ESRI Արհեստական արբանյակ"
msgid "topographic"
msgstr "Տոպոգրաֆիկ"
msgid "locate_me"
msgstr "Գտնել իմ դիրքը"
msgid "you_are_within"
msgstr "Դուք գտնվում եք "
msgid "meters_from_point"
msgstr "մետր հեռավորության վրա այս կետից"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Pengaturan"
msgid "settings"
msgstr "Pengaturan"
msgid "theme"
msgstr "Tema"
msgid "theme_dark"
msgstr "Gelap"
msgid "theme_light"
msgstr "Terang"
msgid "theme_night"
msgstr "Malam"
msgid "theme_black"
msgstr "Hitam"
msgid "theme_mocha"
msgstr "Mocha"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Pencarian Aman"
msgid "off"
msgstr "Mati"
msgid "on"
msgstr "Hidup"
msgid "site_language"
msgstr "Bahasa Situs"
msgid "search_language"
msgstr "Bahasa Pencarian"
msgid "any_language"
msgstr "Bahasa Apa Saja"
msgid "no_results"
msgstr "Tidak ada hasil ditemukan untuk '%s'. Coba kata kunci lain."
msgid "no_more_results"
msgstr "Sepertinya ini adalah akhir dari hasil pencarian."
msgid "safe_search_off"
msgstr "Pencarian Aman dimatikan"
msgid "safe_search_on"
msgstr "Pencarian Aman dihidupkan"
msgid "save_settings"
msgstr "Simpan Pengaturan"
msgid "all_settings"
msgstr "Semua Pengaturan"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Pribadi dan Terbuka"
msgid "site_tags"
msgstr "Mesin Pencari, Q-Gato, Spitfire"
msgid "search"
msgstr "Cari"
msgid "web"
msgstr "Web"
msgid "image"
msgstr "Gambar"
msgid "images"
msgstr "Gambar-Gambar"
msgid "video"
msgstr "Video"
msgid "videos"
msgstr "Video-Video"
msgid "forum"
msgstr "Forum"
msgid "forums"
msgstr "Forum-Forum"
msgid "map"
msgstr "Peta"
msgid "maps"
msgstr "Peta-Peta"
msgid "file"
msgstr "File"
msgid "torrents"
msgstr "Torrent"
msgid "searching_for_new_results"
msgstr "Mencari hasil baru..."
msgid "previous"
msgstr "Sebelumnya"
msgid "next"
msgstr "Berikutnya"
msgid "fetched_in"
msgstr "Ditemukan dalam %s detik"
msgid "sort_seeders"
msgstr "Urutkan berdasarkan seeder"
msgid "sort_leechers"
msgstr "Urutkan berdasarkan leecher"
msgid "sort_lth"
msgstr "Ukuran (kecil ke besar)"
msgid "sort_htl"
msgstr "Ukuran (besar ke kecil)"
msgid "category_all"
msgstr "Semua Kategori"
msgid "category_movie"
msgstr "Film"
msgid "category_audiobook"
msgstr "Buku Audio"
msgid "category_tv"
msgstr "Serial TV"
msgid "category_games"
msgstr "Permainan"
msgid "category_software"
msgstr "Perangkat Lunak"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Musik"
msgid "category_xxx"
msgstr "XXX (Dewasa)"
msgid "apply_settings"
msgstr "Terapkan Pengaturan"
msgid "error"
msgstr "Kesalahan"
msgid "views"
msgstr "Tampilan"
msgid "seeders"
msgstr "Seeder"
msgid "leechers"
msgstr "Leecher"
msgid "no_results_found"
msgstr "Pencarian untuk '%s' tidak menghasilkan hasil."
msgid "suggest_rephrase"
msgstr "Coba susun ulang atau perbaiki kesalahan."
msgid "streets"
msgstr "Jalan"
msgid "satellite"
msgstr "Satelit"
msgid "esri_satellite"
msgstr "Satelit ESRI"
msgid "topographic"
msgstr "Topografi"
msgid "locate_me"
msgstr "Cari Lokasi Saya"
msgid "you_are_within"
msgstr "Anda berada dalam jarak "
msgid "meters_from_point"
msgstr "meter dari titik ini"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Impostazioni"
msgid "settings"
msgstr "Impostazioni"
msgid "theme"
msgstr "Tema"
msgid "theme_dark"
msgstr "Scuro"
msgid "theme_light"
msgstr "Chiaro"
msgid "theme_night"
msgstr "Notte"
msgid "theme_black"
msgstr "Nero"
msgid "theme_mocha"
msgstr "Mocha"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Ricerca sicura"
msgid "off"
msgstr "Disattivato"
msgid "on"
msgstr "Attivato"
msgid "site_language"
msgstr "Lingua del sito"
msgid "search_language"
msgstr "Lingua della ricerca"
msgid "any_language"
msgstr "Qualsiasi lingua"
msgid "no_results"
msgstr "Nessun risultato trovato per '%s'. Prova altri termini di ricerca."
msgid "no_more_results"
msgstr "Sembra che questi siano tutti i risultati."
msgid "safe_search_off"
msgstr "Ricerca sicura disattivata"
msgid "safe_search_on"
msgstr "Ricerca sicura attivata"
msgid "save_settings"
msgstr "Salva impostazioni"
msgid "all_settings"
msgstr "Tutte le impostazioni"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Privato e Aperto"
msgid "site_tags"
msgstr "Motore di ricerca, Q-Gato, Spitfire"
msgid "search"
msgstr "Cerca"
msgid "web"
msgstr "Web"
msgid "image"
msgstr "Immagine"
msgid "images"
msgstr "Immagini"
msgid "video"
msgstr "Video"
msgid "videos"
msgstr "Video"
msgid "forum"
msgstr "Forum"
msgid "forums"
msgstr "Forum"
msgid "map"
msgstr "Mappa"
msgid "maps"
msgstr "Mappe"
msgid "file"
msgstr "File"
msgid "torrents"
msgstr "Torrent"
msgid "searching_for_new_results"
msgstr "Ricerca di nuovi risultati..."
msgid "previous"
msgstr "Precedente"
msgid "next"
msgstr "Successivo"
msgid "fetched_in"
msgstr "Ottenuto in %s secondi"
msgid "sort_seeders"
msgstr "Ordina per seeders"
msgid "sort_leechers"
msgstr "Ordina per leechers"
msgid "sort_lth"
msgstr "Dimensione (crescente)"
msgid "sort_htl"
msgstr "Dimensione (decrescente)"
msgid "category_all"
msgstr "Tutte le categorie"
msgid "category_movie"
msgstr "Film"
msgid "category_audiobook"
msgstr "Audiolibri"
msgid "category_tv"
msgstr "Serie TV"
msgid "category_games"
msgstr "Giochi"
msgid "category_software"
msgstr "Software"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Musica"
msgid "category_xxx"
msgstr "XXX (per adulti)"
msgid "apply_settings"
msgstr "Applica impostazioni"
msgid "error"
msgstr "Errore"
msgid "views"
msgstr "Visualizzazioni"
msgid "seeders"
msgstr "Seeders"
msgid "leechers"
msgstr "Leechers"
msgid "no_results_found"
msgstr "La tua ricerca per '%s' non ha prodotto risultati."
msgid "suggest_rephrase"
msgstr "Prova a riformulare o correggere eventuali errori."
msgid "streets"
msgstr "Strade"
msgid "satellite"
msgstr "Satellitare"
msgid "esri_satellite"
msgstr "Satellitare ESRI"
msgid "topographic"
msgstr "Topografico"
msgid "locate_me"
msgstr "Individua la mia posizione"
msgid "you_are_within"
msgstr "Sei entro "
msgid "meters_from_point"
msgstr "metri da questo punto"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "הגדרות"
msgid "settings"
msgstr "הגדרות"
msgid "theme"
msgstr "ערכת נושא"
msgid "theme_dark"
msgstr "כהה"
msgid "theme_light"
msgstr "בהירה"
msgid "theme_night"
msgstr "לילה"
msgid "theme_black"
msgstr "שחור"
msgid "theme_mocha"
msgstr "מוקה"
msgid "theme_latte"
msgstr "לאטה"
msgid "safe_search"
msgstr "חיפוש בטוח"
msgid "off"
msgstr "כבוי"
msgid "on"
msgstr "מופעל"
msgid "site_language"
msgstr "שפת האתר"
msgid "search_language"
msgstr "שפת החיפוש"
msgid "any_language"
msgstr "כל שפה"
msgid "no_results"
msgstr "לא נמצאו תוצאות עבור '%s'. נסו מילות מפתח אחרות."
msgid "no_more_results"
msgstr "נראה שהגעתם לסוף התוצאות."
msgid "safe_search_off"
msgstr "חיפוש בטוח כבוי"
msgid "safe_search_on"
msgstr "חיפוש בטוח מופעל"
msgid "save_settings"
msgstr "שמור הגדרות"
msgid "all_settings"
msgstr "כל ההגדרות"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - פרטי ופתוח"
msgid "site_tags"
msgstr "מנוע חיפוש, Q-Gato, Spitfire"
msgid "search"
msgstr "חיפוש"
msgid "web"
msgstr "אינטרנט"
msgid "image"
msgstr "תמונה"
msgid "images"
msgstr "תמונות"
msgid "video"
msgstr "וידאו"
msgid "videos"
msgstr "סרטונים"
msgid "forum"
msgstr "פורום"
msgid "forums"
msgstr "פורומים"
msgid "map"
msgstr "מפה"
msgid "maps"
msgstr "מפות"
msgid "file"
msgstr "קובץ"
msgid "torrents"
msgstr "טורנטים"
msgid "searching_for_new_results"
msgstr "מחפש תוצאות חדשות..."
msgid "previous"
msgstr "הקודם"
msgid "next"
msgstr "הבא"
msgid "fetched_in"
msgstr "הובא ב-%s שניות"
msgid "sort_seeders"
msgstr "מיון לפי משתפים"
msgid "sort_leechers"
msgstr "מיון לפי מורידים"
msgid "sort_lth"
msgstr "גודל (מהקטן לגדול)"
msgid "sort_htl"
msgstr "גודל (מהגדול לקטן)"
msgid "category_all"
msgstr "כל הקטגוריות"
msgid "category_movie"
msgstr "סרטים"
msgid "category_audiobook"
msgstr "ספרי שמע"
msgid "category_tv"
msgstr "סדרות טלוויזיה"
msgid "category_games"
msgstr "משחקים"
msgid "category_software"
msgstr "תוכנות"
msgid "category_anime"
msgstr "אנימה"
msgid "category_music"
msgstr "מוזיקה"
msgid "category_xxx"
msgstr "XXX (למבוגרים בלבד)"
msgid "apply_settings"
msgstr "החל הגדרות"
msgid "error"
msgstr "שגיאה"
msgid "views"
msgstr "צפיות"
msgid "seeders"
msgstr "משתפים"
msgid "leechers"
msgstr "מורידים"
msgid "no_results_found"
msgstr "החיפוש עבור '%s' לא הניב תוצאות."
msgid "suggest_rephrase"
msgstr "נסו לנסח מחדש או לתקן שגיאות."
msgid "streets"
msgstr "רחובות"
msgid "satellite"
msgstr "לוויין"
msgid "esri_satellite"
msgstr "לוויין ESRI"
msgid "topographic"
msgstr "טופוגרפי"
msgid "locate_me"
msgstr "מצא את מיקומי"
msgid "you_are_within"
msgstr "אתם נמצאים במרחק של "
msgid "meters_from_point"
msgstr "מטרים מהנקודה הזו"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "設定"
msgid "settings"
msgstr "設定"
msgid "theme"
msgstr "テーマ"
msgid "theme_dark"
msgstr "ダーク"
msgid "theme_light"
msgstr "ライト"
msgid "theme_night"
msgstr "ナイト"
msgid "theme_black"
msgstr "ブラック"
msgid "theme_mocha"
msgstr "モカ"
msgid "theme_latte"
msgstr "ラテ"
msgid "safe_search"
msgstr "セーフサーチ"
msgid "off"
msgstr "オフ"
msgid "on"
msgstr "オン"
msgid "site_language"
msgstr "サイトの言語"
msgid "search_language"
msgstr "検索言語"
msgid "any_language"
msgstr "すべての言語"
msgid "no_results"
msgstr "'%s' の結果が見つかりませんでした。別のキーワードを試してください。"
msgid "no_more_results"
msgstr "これが結果の終わりのようです。"
msgid "safe_search_off"
msgstr "セーフサーチはオフになっています"
msgid "safe_search_on"
msgstr "セーフサーチはオンになっています"
msgid "save_settings"
msgstr "設定を保存"
msgid "all_settings"
msgstr "すべての設定"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - プライベートでオープン"
msgid "site_tags"
msgstr "検索エンジン, Q-Gato, Spitfire"
msgid "search"
msgstr "検索"
msgid "web"
msgstr "ウェブ"
msgid "image"
msgstr "画像"
msgid "images"
msgstr "画像"
msgid "video"
msgstr "ビデオ"
msgid "videos"
msgstr "ビデオ"
msgid "forum"
msgstr "フォーラム"
msgid "forums"
msgstr "フォーラム"
msgid "map"
msgstr "地図"
msgid "maps"
msgstr "地図"
msgid "file"
msgstr "ファイル"
msgid "torrents"
msgstr "トレント"
msgid "searching_for_new_results"
msgstr "新しい結果を検索中..."
msgid "previous"
msgstr "前"
msgid "next"
msgstr "次"
msgid "fetched_in"
msgstr "%s 秒で取得"
msgid "sort_seeders"
msgstr "シーダーで並べ替え"
msgid "sort_leechers"
msgstr "リーチャーで並べ替え"
msgid "sort_lth"
msgstr "サイズ (小さい順)"
msgid "sort_htl"
msgstr "サイズ (大きい順)"
msgid "category_all"
msgstr "すべてのカテゴリ"
msgid "category_movie"
msgstr "映画"
msgid "category_audiobook"
msgstr "オーディオブック"
msgid "category_tv"
msgstr "テレビシリーズ"
msgid "category_games"
msgstr "ゲーム"
msgid "category_software"
msgstr "ソフトウェア"
msgid "category_anime"
msgstr "アニメ"
msgid "category_music"
msgstr "音楽"
msgid "category_xxx"
msgstr "XXX (大人向け)"
msgid "apply_settings"
msgstr "設定を適用"
msgid "error"
msgstr "エラー"
msgid "views"
msgstr "ビュー"
msgid "seeders"
msgstr "シーダー"
msgid "leechers"
msgstr "リーチャー"
msgid "no_results_found"
msgstr "'%s' の検索結果が見つかりませんでした。"
msgid "suggest_rephrase"
msgstr "言い換えるか、エラーを修正してください。"
msgid "streets"
msgstr "ストリート"
msgid "satellite"
msgstr "衛星"
msgid "esri_satellite"
msgstr "ESRI 衛星"
msgid "topographic"
msgstr "地形図"
msgid "locate_me"
msgstr "現在地を特定"
msgid "you_are_within"
msgstr "あなたは "
msgid "meters_from_point"
msgstr "メートル以内の位置にいます"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "설정"
msgid "settings"
msgstr "설정"
msgid "theme"
msgstr "테마"
msgid "theme_dark"
msgstr "어두운"
msgid "theme_light"
msgstr "밝은"
msgid "theme_night"
msgstr "야간"
msgid "theme_black"
msgstr "검정"
msgid "theme_mocha"
msgstr "모카"
msgid "theme_latte"
msgstr "라떼"
msgid "safe_search"
msgstr "안전 검색"
msgid "off"
msgstr "꺼짐"
msgid "on"
msgstr "켜짐"
msgid "site_language"
msgstr "사이트 언어"
msgid "search_language"
msgstr "검색 언어"
msgid "any_language"
msgstr "모든 언어"
msgid "no_results"
msgstr "'%s'에 대한 결과를 찾을 수 없습니다. 다른 키워드를 시도해 보세요."
msgid "no_more_results"
msgstr "결과가 더 이상 없는 것 같습니다."
msgid "safe_search_off"
msgstr "안전 검색이 꺼져 있습니다"
msgid "safe_search_on"
msgstr "안전 검색이 켜져 있습니다"
msgid "save_settings"
msgstr "설정 저장"
msgid "all_settings"
msgstr "모든 설정"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - 개인적이고 개방적"
msgid "site_tags"
msgstr "검색 엔진, Q-Gato, Spitfire"
msgid "search"
msgstr "검색"
msgid "web"
msgstr "웹"
msgid "image"
msgstr "이미지"
msgid "images"
msgstr "이미지들"
msgid "video"
msgstr "동영상"
msgid "videos"
msgstr "동영상들"
msgid "forum"
msgstr "포럼"
msgid "forums"
msgstr "포럼들"
msgid "map"
msgstr "지도"
msgid "maps"
msgstr "지도들"
msgid "file"
msgstr "파일"
msgid "torrents"
msgstr "토렌트"
msgid "searching_for_new_results"
msgstr "새로운 결과를 검색 중..."
msgid "previous"
msgstr "이전"
msgid "next"
msgstr "다음"
msgid "fetched_in"
msgstr "%s초 만에 가져옴"
msgid "sort_seeders"
msgstr "시더 기준 정렬"
msgid "sort_leechers"
msgstr "리처 기준 정렬"
msgid "sort_lth"
msgstr "크기 (작은 것부터)"
msgid "sort_htl"
msgstr "크기 (큰 것부터)"
msgid "category_all"
msgstr "모든 카테고리"
msgid "category_movie"
msgstr "영화"
msgid "category_audiobook"
msgstr "오디오북"
msgid "category_tv"
msgstr "TV 시리즈"
msgid "category_games"
msgstr "게임"
msgid "category_software"
msgstr "소프트웨어"
msgid "category_anime"
msgstr "애니메이션"
msgid "category_music"
msgstr "음악"
msgid "category_xxx"
msgstr "XXX (성인용)"
msgid "apply_settings"
msgstr "설정 적용"
msgid "error"
msgstr "오류"
msgid "views"
msgstr "조회수"
msgid "seeders"
msgstr "시더"
msgid "leechers"
msgstr "리처"
msgid "no_results_found"
msgstr "'%s'에 대한 검색 결과가 없습니다."
msgid "suggest_rephrase"
msgstr "다시 표현하거나 오류를 수정해 보세요."
msgid "streets"
msgstr "거리"
msgid "satellite"
msgstr "위성"
msgid "esri_satellite"
msgstr "ESRI 위성"
msgid "topographic"
msgstr "지형도"
msgid "locate_me"
msgstr "내 위치 찾기"
msgid "you_are_within"
msgstr "당신은 이 안에 있습니다: "
msgid "meters_from_point"
msgstr "미터 떨어진 지점"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Nustatymai"
msgid "settings"
msgstr "Nustatymai"
msgid "theme"
msgstr "Tema"
msgid "theme_dark"
msgstr "Tamsi"
msgid "theme_light"
msgstr "Šviesi"
msgid "theme_night"
msgstr "Naktinė"
msgid "theme_black"
msgstr "Juoda"
msgid "theme_mocha"
msgstr "Moka"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Saugi paieška"
msgid "off"
msgstr "Išjungta"
msgid "on"
msgstr "Įjungta"
msgid "site_language"
msgstr "Svetainės kalba"
msgid "search_language"
msgstr "Paieškos kalba"
msgid "any_language"
msgstr "Bet kokia kalba"
msgid "no_results"
msgstr "Rezultatų pagal '%s' nerasta. Pabandykite kitus raktažodžius."
msgid "no_more_results"
msgstr "Panašu, kad tai visi rezultatai."
msgid "safe_search_off"
msgstr "Saugi paieška išjungta"
msgid "safe_search_on"
msgstr "Saugi paieška įjungta"
msgid "save_settings"
msgstr "Išsaugoti nustatymus"
msgid "all_settings"
msgstr "Visi nustatymai"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Privatus ir Atviras"
msgid "site_tags"
msgstr "Paieškos sistema, Q-Gato, Spitfire"
msgid "search"
msgstr "Paieška"
msgid "web"
msgstr "Tinklas"
msgid "image"
msgstr "Vaizdas"
msgid "images"
msgstr "Vaizdai"
msgid "video"
msgstr "Vaizdo įrašas"
msgid "videos"
msgstr "Vaizdo įrašai"
msgid "forum"
msgstr "Forumas"
msgid "forums"
msgstr "Forumai"
msgid "map"
msgstr "Žemėlapis"
msgid "maps"
msgstr "Žemėlapiai"
msgid "file"
msgstr "Failas"
msgid "torrents"
msgstr "Torrentai"
msgid "searching_for_new_results"
msgstr "Ieškoma naujų rezultatų..."
msgid "previous"
msgstr "Ankstesnis"
msgid "next"
msgstr "Kitas"
msgid "fetched_in"
msgstr "Gauta per %s sekundes"
msgid "sort_seeders"
msgstr "Rikiuoti pagal siuntėjus"
msgid "sort_leechers"
msgstr "Rikiuoti pagal gavėjus"
msgid "sort_lth"
msgstr "Dydis (mažėjimo tvarka)"
msgid "sort_htl"
msgstr "Dydis (didėjimo tvarka)"
msgid "category_all"
msgstr "Visos kategorijos"
msgid "category_movie"
msgstr "Filmai"
msgid "category_audiobook"
msgstr "Garso knygos"
msgid "category_tv"
msgstr "TV serialai"
msgid "category_games"
msgstr "Žaidimai"
msgid "category_software"
msgstr "Programinė įranga"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Muzika"
msgid "category_xxx"
msgstr "XXX (suaugusiems)"
msgid "apply_settings"
msgstr "Taikyti nustatymus"
msgid "error"
msgstr "Klaida"
msgid "views"
msgstr "Peržiūros"
msgid "seeders"
msgstr "Siuntėjai"
msgid "leechers"
msgstr "Gavėjai"
msgid "no_results_found"
msgstr "Pagal '%s' rezultatų nerasta."
msgid "suggest_rephrase"
msgstr "Pabandykite performuluoti arba pataisyti klaidas."
msgid "streets"
msgstr "Gatvės"
msgid "satellite"
msgstr "Palydovas"
msgid "esri_satellite"
msgstr "ESRI palydovas"
msgid "topographic"
msgstr "Topografinis"
msgid "locate_me"
msgstr "Surasti mano vietą"
msgid "you_are_within"
msgstr "Jūs esate "
msgid "meters_from_point"
msgstr "metrų nuo šio taško"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Iestatījumi"
msgid "settings"
msgstr "Iestatījumi"
msgid "theme"
msgstr "Tēma"
msgid "theme_dark"
msgstr "Tumša"
msgid "theme_light"
msgstr "Gaiša"
msgid "theme_night"
msgstr "Nakts"
msgid "theme_black"
msgstr "Melna"
msgid "theme_mocha"
msgstr "Moka"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Droša meklēšana"
msgid "off"
msgstr "Izslēgts"
msgid "on"
msgstr "Ieslēgts"
msgid "site_language"
msgstr "Vietnes valoda"
msgid "search_language"
msgstr "Meklēšanas valoda"
msgid "any_language"
msgstr "Jebkura valoda"
msgid "no_results"
msgstr "Netika atrasti rezultāti '%s'. Mēģiniet citus atslēgvārdus."
msgid "no_more_results"
msgstr "Šķiet, ka šie ir visi rezultāti."
msgid "safe_search_off"
msgstr "Drošā meklēšana ir izslēgta"
msgid "safe_search_on"
msgstr "Drošā meklēšana ir ieslēgta"
msgid "save_settings"
msgstr "Saglabāt iestatījumus"
msgid "all_settings"
msgstr "Visi iestatījumi"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Privāts un Atvērts"
msgid "site_tags"
msgstr "Meklētājprogramma, Q-Gato, Spitfire"
msgid "search"
msgstr "Meklēt"
msgid "web"
msgstr "Tīmeklis"
msgid "image"
msgstr "Attēls"
msgid "images"
msgstr "Attēli"
msgid "video"
msgstr "Video"
msgid "videos"
msgstr "Video faili"
msgid "forum"
msgstr "Forums"
msgid "forums"
msgstr "Forumi"
msgid "map"
msgstr "Karte"
msgid "maps"
msgstr "Kartes"
msgid "file"
msgstr "Fails"
msgid "torrents"
msgstr "Torenti"
msgid "searching_for_new_results"
msgstr "Meklē jaunus rezultātus..."
msgid "previous"
msgstr "Iepriekšējais"
msgid "next"
msgstr "Nākamais"
msgid "fetched_in"
msgstr "Iegūts %s sekundēs"
msgid "sort_seeders"
msgstr "Kārtot pēc sējējiem"
msgid "sort_leechers"
msgstr "Kārtot pēc lejupielādētājiem"
msgid "sort_lth"
msgstr "Izmērs (no mazākā uz lielāko)"
msgid "sort_htl"
msgstr "Izmērs (no lielākā uz mazāko)"
msgid "category_all"
msgstr "Visas kategorijas"
msgid "category_movie"
msgstr "Filmas"
msgid "category_audiobook"
msgstr "Audiogrāmatas"
msgid "category_tv"
msgstr "TV sērijas"
msgid "category_games"
msgstr "Spēles"
msgid "category_software"
msgstr "Programmatūra"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Mūzika"
msgid "category_xxx"
msgstr "XXX (pieaugušajiem)"
msgid "apply_settings"
msgstr "Pielietot iestatījumus"
msgid "error"
msgstr "Kļūda"
msgid "views"
msgstr "Skatījumi"
msgid "seeders"
msgstr "Sējēji"
msgid "leechers"
msgstr "Lejupielādētāji"
msgid "no_results_found"
msgstr "Meklējumam '%s' rezultāti netika atrasti."
msgid "suggest_rephrase"
msgstr "Mēģiniet pārfrazēt vai izlabot kļūdas."
msgid "streets"
msgstr "Ielas"
msgid "satellite"
msgstr "Satelīts"
msgid "esri_satellite"
msgstr "ESRI satelīts"
msgid "topographic"
msgstr "Topogrāfiskais"
msgid "locate_me"
msgstr "Atrast manu atrašanās vietu"
msgid "you_are_within"
msgstr "Jūs atrodaties "
msgid "meters_from_point"
msgstr "metru attālumā no šī punkta"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Instellingen"
msgid "settings"
msgstr "Instellingen"
msgid "theme"
msgstr "Thema"
msgid "theme_dark"
msgstr "Donker"
msgid "theme_light"
msgstr "Licht"
msgid "theme_night"
msgstr "Nacht"
msgid "theme_black"
msgstr "Zwart"
msgid "theme_mocha"
msgstr "Mocha"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Veilige zoekopdracht"
msgid "off"
msgstr "Uit"
msgid "on"
msgstr "Aan"
msgid "site_language"
msgstr "Websitetaal"
msgid "search_language"
msgstr "Zoektaal"
msgid "any_language"
msgstr "Elke taal"
msgid "no_results"
msgstr "Geen resultaten gevonden voor '%s'. Probeer andere zoekwoorden."
msgid "no_more_results"
msgstr "Dit lijkt het einde van de resultaten te zijn."
msgid "safe_search_off"
msgstr "Veilige zoekopdracht is uitgeschakeld"
msgid "safe_search_on"
msgstr "Veilige zoekopdracht is ingeschakeld"
msgid "save_settings"
msgstr "Instellingen opslaan"
msgid "all_settings"
msgstr "Alle instellingen"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Privé en Open"
msgid "site_tags"
msgstr "Zoekmachine, Q-Gato, Spitfire"
msgid "search"
msgstr "Zoeken"
msgid "web"
msgstr "Web"
msgid "image"
msgstr "Afbeelding"
msgid "images"
msgstr "Afbeeldingen"
msgid "video"
msgstr "Video"
msgid "videos"
msgstr "Video's"
msgid "forum"
msgstr "Forum"
msgid "forums"
msgstr "Forums"
msgid "map"
msgstr "Kaart"
msgid "maps"
msgstr "Kaarten"
msgid "file"
msgstr "Bestand"
msgid "torrents"
msgstr "Torrents"
msgid "searching_for_new_results"
msgstr "Nieuwe resultaten zoeken..."
msgid "previous"
msgstr "Vorige"
msgid "next"
msgstr "Volgende"
msgid "fetched_in"
msgstr "Opgehaald in %s seconden"
msgid "sort_seeders"
msgstr "Sorteer op seeders"
msgid "sort_leechers"
msgstr "Sorteer op leechers"
msgid "sort_lth"
msgstr "Grootte (klein naar groot)"
msgid "sort_htl"
msgstr "Grootte (groot naar klein)"
msgid "category_all"
msgstr "Alle categorieën"
msgid "category_movie"
msgstr "Films"
msgid "category_audiobook"
msgstr "Audioboeken"
msgid "category_tv"
msgstr "Tv-series"
msgid "category_games"
msgstr "Games"
msgid "category_software"
msgstr "Software"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Muziek"
msgid "category_xxx"
msgstr "XXX (volwassenen)"
msgid "apply_settings"
msgstr "Instellingen toepassen"
msgid "error"
msgstr "Fout"
msgid "views"
msgstr "Weergaven"
msgid "seeders"
msgstr "Seeders"
msgid "leechers"
msgstr "Leechers"
msgid "no_results_found"
msgstr "Uw zoekopdracht '%s' leverde geen resultaten op."
msgid "suggest_rephrase"
msgstr "Probeer opnieuw te formuleren of fouten te corrigeren."
msgid "streets"
msgstr "Straten"
msgid "satellite"
msgstr "Satelliet"
msgid "esri_satellite"
msgstr "ESRI Satelliet"
msgid "topographic"
msgstr "Topografisch"
msgid "locate_me"
msgstr "Vind mijn locatie"
msgid "you_are_within"
msgstr "Je bevindt je binnen "
msgid "meters_from_point"
msgstr "meter van dit punt"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Innstillinger"
msgid "settings"
msgstr "Innstillinger"
msgid "theme"
msgstr "Tema"
msgid "theme_dark"
msgstr "Mørk"
msgid "theme_light"
msgstr "Lys"
msgid "theme_night"
msgstr "Natt"
msgid "theme_black"
msgstr "Svart"
msgid "theme_mocha"
msgstr "Mokka"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Sikkert søk"
msgid "off"
msgstr "Av"
msgid "on"
msgstr "På"
msgid "site_language"
msgstr "Nettstedets språk"
msgid "search_language"
msgstr "Søkespråk"
msgid "any_language"
msgstr "Alle språk"
msgid "no_results"
msgstr "Ingen resultater funnet for '%s'. Prøv andre søkeord."
msgid "no_more_results"
msgstr "Det ser ut til at dette er slutten på resultatene."
msgid "safe_search_off"
msgstr "Sikkert søk er av"
msgid "safe_search_on"
msgstr "Sikkert søk er på"
msgid "save_settings"
msgstr "Lagre innstillinger"
msgid "all_settings"
msgstr "Alle innstillinger"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Privat og Åpen"
msgid "site_tags"
msgstr "Søkemotor, Q-Gato, Spitfire"
msgid "search"
msgstr "Søk"
msgid "web"
msgstr "Web"
msgid "image"
msgstr "Bilde"
msgid "images"
msgstr "Bilder"
msgid "video"
msgstr "Video"
msgid "videos"
msgstr "Videoer"
msgid "forum"
msgstr "Forum"
msgid "forums"
msgstr "Fora"
msgid "map"
msgstr "Kart"
msgid "maps"
msgstr "Kart"
msgid "file"
msgstr "Fil"
msgid "torrents"
msgstr "Torrenter"
msgid "searching_for_new_results"
msgstr "Søker etter nye resultater..."
msgid "previous"
msgstr "Forrige"
msgid "next"
msgstr "Neste"
msgid "fetched_in"
msgstr "Hentet på %s sekunder"
msgid "sort_seeders"
msgstr "Sorter etter seeders"
msgid "sort_leechers"
msgstr "Sorter etter leechers"
msgid "sort_lth"
msgstr "Størrelse (minst til størst)"
msgid "sort_htl"
msgstr "Størrelse (størst til minst)"
msgid "category_all"
msgstr "Alle kategorier"
msgid "category_movie"
msgstr "Filmer"
msgid "category_audiobook"
msgstr "Lydbøker"
msgid "category_tv"
msgstr "TV-serier"
msgid "category_games"
msgstr "Spill"
msgid "category_software"
msgstr "Programvare"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Musikk"
msgid "category_xxx"
msgstr "XXX (voksen)"
msgid "apply_settings"
msgstr "Bruk innstillinger"
msgid "error"
msgstr "Feil"
msgid "views"
msgstr "Visninger"
msgid "seeders"
msgstr "Seeders"
msgid "leechers"
msgstr "Leechers"
msgid "no_results_found"
msgstr "Søket ditt etter '%s' ga ingen resultater."
msgid "suggest_rephrase"
msgstr "Prøv å omformulere eller rette eventuelle feil."
msgid "streets"
msgstr "Gater"
msgid "satellite"
msgstr "Satellitt"
msgid "esri_satellite"
msgstr "ESRI Satellitt"
msgid "topographic"
msgstr "Topografisk"
msgid "locate_me"
msgstr "Finn meg"
msgid "you_are_within"
msgstr "Du er innenfor "
msgid "meters_from_point"
msgstr "meter fra dette punktet"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Configurações"
msgid "settings"
msgstr "Configurações"
msgid "theme"
msgstr "Tema"
msgid "theme_dark"
msgstr "Escuro"
msgid "theme_light"
msgstr "Claro"
msgid "theme_night"
msgstr "Noturno"
msgid "theme_black"
msgstr "Preto"
msgid "theme_mocha"
msgstr "Mocha"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Pesquisa Segura"
msgid "off"
msgstr "Desativado"
msgid "on"
msgstr "Ativado"
msgid "site_language"
msgstr "Idioma do Site"
msgid "search_language"
msgstr "Idioma da Pesquisa"
msgid "any_language"
msgstr "Qualquer idioma"
msgid "no_results"
msgstr "Nenhum resultado encontrado para '%s'. Tente outras palavras-chave."
msgid "no_more_results"
msgstr "Parece que estes são todos os resultados."
msgid "safe_search_off"
msgstr "Pesquisa Segura está desativada"
msgid "safe_search_on"
msgstr "Pesquisa Segura está ativada"
msgid "save_settings"
msgstr "Salvar Configurações"
msgid "all_settings"
msgstr "Todas as Configurações"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Privado e Aberto"
msgid "site_tags"
msgstr "Motor de Busca, Q-Gato, Spitfire"
msgid "search"
msgstr "Pesquisar"
msgid "web"
msgstr "Web"
msgid "image"
msgstr "Imagem"
msgid "images"
msgstr "Imagens"
msgid "video"
msgstr "Vídeo"
msgid "videos"
msgstr "Vídeos"
msgid "forum"
msgstr "Fórum"
msgid "forums"
msgstr "Fóruns"
msgid "map"
msgstr "Mapa"
msgid "maps"
msgstr "Mapas"
msgid "file"
msgstr "Arquivo"
msgid "torrents"
msgstr "Torrents"
msgid "searching_for_new_results"
msgstr "Procurando por novos resultados..."
msgid "previous"
msgstr "Anterior"
msgid "next"
msgstr "Próximo"
msgid "fetched_in"
msgstr "Obtido em %s segundos"
msgid "sort_seeders"
msgstr "Ordenar por seeders"
msgid "sort_leechers"
msgstr "Ordenar por leechers"
msgid "sort_lth"
msgstr "Tamanho (menor para maior)"
msgid "sort_htl"
msgstr "Tamanho (maior para menor)"
msgid "category_all"
msgstr "Todas as Categorias"
msgid "category_movie"
msgstr "Filmes"
msgid "category_audiobook"
msgstr "Audiolivros"
msgid "category_tv"
msgstr "Séries de TV"
msgid "category_games"
msgstr "Jogos"
msgid "category_software"
msgstr "Software"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Música"
msgid "category_xxx"
msgstr "XXX (Adulto)"
msgid "apply_settings"
msgstr "Aplicar Configurações"
msgid "error"
msgstr "Erro"
msgid "views"
msgstr "Visualizações"
msgid "seeders"
msgstr "Seeders"
msgid "leechers"
msgstr "Leechers"
msgid "no_results_found"
msgstr "Sua pesquisa por '%s' não encontrou resultados."
msgid "suggest_rephrase"
msgstr "Tente reformular ou corrigir erros."
msgid "streets"
msgstr "Ruas"
msgid "satellite"
msgstr "Satélite"
msgid "esri_satellite"
msgstr "Satélite ESRI"
msgid "topographic"
msgstr "Topográfico"
msgid "locate_me"
msgstr "Localizar-me"
msgid "you_are_within"
msgstr "Você está dentro de "
msgid "meters_from_point"
msgstr "metros deste ponto"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Setări"
msgid "settings"
msgstr "Setări"
msgid "theme"
msgstr "Temă"
msgid "theme_dark"
msgstr "Întunecat"
msgid "theme_light"
msgstr "Luminos"
msgid "theme_night"
msgstr "Noapte"
msgid "theme_black"
msgstr "Negru"
msgid "theme_mocha"
msgstr "Mocha"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Căutare sigură"
msgid "off"
msgstr "Dezactivat"
msgid "on"
msgstr "Activat"
msgid "site_language"
msgstr "Limba site-ului"
msgid "search_language"
msgstr "Limba căutării"
msgid "any_language"
msgstr "Oricare limbă"
msgid "no_results"
msgstr "Nu s-au găsit rezultate pentru '%s'. Încercați alte cuvinte cheie."
msgid "no_more_results"
msgstr "Se pare că acestea sunt toate rezultatele."
msgid "safe_search_off"
msgstr "Căutarea sigură este dezactivată"
msgid "safe_search_on"
msgstr "Căutarea sigură este activată"
msgid "save_settings"
msgstr "Salvează setările"
msgid "all_settings"
msgstr "Toate setările"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Privat și Deschis"
msgid "site_tags"
msgstr "Motor de căutare, Q-Gato, Spitfire"
msgid "search"
msgstr "Căutare"
msgid "web"
msgstr "Web"
msgid "image"
msgstr "Imagine"
msgid "images"
msgstr "Imagini"
msgid "video"
msgstr "Video"
msgid "videos"
msgstr "Videoclipuri"
msgid "forum"
msgstr "Forum"
msgid "forums"
msgstr "Forumuri"
msgid "map"
msgstr "Hartă"
msgid "maps"
msgstr "Hărți"
msgid "file"
msgstr "Fișier"
msgid "torrents"
msgstr "Torrenturi"
msgid "searching_for_new_results"
msgstr "Caut rezultate noi..."
msgid "previous"
msgstr "Anterior"
msgid "next"
msgstr "Următorul"
msgid "fetched_in"
msgstr "Obținut în %s secunde"
msgid "sort_seeders"
msgstr "Sortează după seeders"
msgid "sort_leechers"
msgstr "Sortează după leechers"
msgid "sort_lth"
msgstr "Dimensiune (mic la mare)"
msgid "sort_htl"
msgstr "Dimensiune (mare la mic)"
msgid "category_all"
msgstr "Toate categoriile"
msgid "category_movie"
msgstr "Filme"
msgid "category_audiobook"
msgstr "Audiobooks"
msgid "category_tv"
msgstr "Seriale TV"
msgid "category_games"
msgstr "Jocuri"
msgid "category_software"
msgstr "Software"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Muzică"
msgid "category_xxx"
msgstr "XXX (Adulți)"
msgid "apply_settings"
msgstr "Aplică setările"
msgid "error"
msgstr "Eroare"
msgid "views"
msgstr "Vizualizări"
msgid "seeders"
msgstr "Seeders"
msgid "leechers"
msgstr "Leechers"
msgid "no_results_found"
msgstr "Căutarea pentru '%s' nu a returnat niciun rezultat."
msgid "suggest_rephrase"
msgstr "Încercați să reformulați sau să corectați erorile."
msgid "streets"
msgstr "Străzi"
msgid "satellite"
msgstr "Satelit"
msgid "esri_satellite"
msgstr "Satelit ESRI"
msgid "topographic"
msgstr "Topografic"
msgid "locate_me"
msgstr "Găsește-mă"
msgid "you_are_within"
msgstr "Te afli la "
msgid "meters_from_point"
msgstr "metri de acest punct"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Настройки"
msgid "settings"
msgstr "Настройки"
msgid "theme"
msgstr "Тема"
msgid "theme_dark"
msgstr "Тёмная"
msgid "theme_light"
msgstr "Светлая"
msgid "theme_night"
msgstr "Ночная"
msgid "theme_black"
msgstr "Чёрная"
msgid "theme_mocha"
msgstr "Мокка"
msgid "theme_latte"
msgstr "Латте"
msgid "safe_search"
msgstr "Безопасный поиск"
msgid "off"
msgstr "Выключено"
msgid "on"
msgstr "Включено"
msgid "site_language"
msgstr "Язык сайта"
msgid "search_language"
msgstr "Язык поиска"
msgid "any_language"
msgstr "Любой язык"
msgid "no_results"
msgstr "Результатов по запросу '%s' не найдено. Попробуйте другие ключевые слова."
msgid "no_more_results"
msgstr "Похоже, это все результаты."
msgid "safe_search_off"
msgstr "Безопасный поиск отключен"
msgid "safe_search_on"
msgstr "Безопасный поиск включен"
msgid "save_settings"
msgstr "Сохранить настройки"
msgid "all_settings"
msgstr "Все настройки"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Приватный и Открытый"
msgid "site_tags"
msgstr "Поисковая система, Q-Gato, Spitfire"
msgid "search"
msgstr "Поиск"
msgid "web"
msgstr "Веб"
msgid "image"
msgstr "Изображение"
msgid "images"
msgstr "Изображения"
msgid "video"
msgstr "Видео"
msgid "videos"
msgstr "Видео"
msgid "forum"
msgstr "Форум"
msgid "forums"
msgstr "Форумы"
msgid "map"
msgstr "Карта"
msgid "maps"
msgstr "Карты"
msgid "file"
msgstr "Файл"
msgid "torrents"
msgstr "Торренты"
msgid "searching_for_new_results"
msgstr "Идёт поиск новых результатов..."
msgid "previous"
msgstr "Предыдущий"
msgid "next"
msgstr "Следующий"
msgid "fetched_in"
msgstr "Получено за %s секунд"
msgid "sort_seeders"
msgstr "Сортировать по сидерам"
msgid "sort_leechers"
msgstr "Сортировать по личерам"
msgid "sort_lth"
msgstr "Размер (от меньшего к большему)"
msgid "sort_htl"
msgstr "Размер (от большего к меньшему)"
msgid "category_all"
msgstr "Все категории"
msgid "category_movie"
msgstr "Фильмы"
msgid "category_audiobook"
msgstr "Аудиокниги"
msgid "category_tv"
msgstr "Сериалы"
msgid "category_games"
msgstr "Игры"
msgid "category_software"
msgstr "Программы"
msgid "category_anime"
msgstr "Аниме"
msgid "category_music"
msgstr "Музыка"
msgid "category_xxx"
msgstr "XXX (для взрослых)"
msgid "apply_settings"
msgstr "Применить настройки"
msgid "error"
msgstr "Ошибка"
msgid "views"
msgstr "Просмотры"
msgid "seeders"
msgstr "Сидеры"
msgid "leechers"
msgstr "Личеры"
msgid "no_results_found"
msgstr "По запросу '%s' результатов не найдено."
msgid "suggest_rephrase"
msgstr "Попробуйте переформулировать запрос или исправить ошибки."
msgid "streets"
msgstr "Улицы"
msgid "satellite"
msgstr "Спутник"
msgid "esri_satellite"
msgstr "Спутник ESRI"
msgid "topographic"
msgstr "Топографическая"
msgid "locate_me"
msgstr "Найти моё местоположение"
msgid "you_are_within"
msgstr "Вы находитесь в "
msgid "meters_from_point"
msgstr "метрах от этой точки"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Nastavenia"
msgid "settings"
msgstr "Nastavenia"
msgid "theme"
msgstr "Téma"
msgid "theme_dark"
msgstr "Tmavá"
msgid "theme_light"
msgstr "Svetlá"
msgid "theme_night"
msgstr "Nočná"
msgid "theme_black"
msgstr "Čierna"
msgid "theme_mocha"
msgstr "Moka"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Bezpečné vyhľadávanie"
msgid "off"
msgstr "Vypnuté"
msgid "on"
msgstr "Zapnuté"
msgid "site_language"
msgstr "Jazyk webu"
msgid "search_language"
msgstr "Jazyk vyhľadávania"
msgid "any_language"
msgstr "Akýkoľvek jazyk"
msgid "no_results"
msgstr "Pre '%s' neboli nájdené žiadne výsledky. Skúste iné kľúčové slová."
msgid "no_more_results"
msgstr "Zdá sa, že to sú všetky výsledky."
msgid "safe_search_off"
msgstr "Bezpečné vyhľadávanie je vypnuté"
msgid "safe_search_on"
msgstr "Bezpečné vyhľadávanie je zapnuté"
msgid "save_settings"
msgstr "Uložiť nastavenia"
msgid "all_settings"
msgstr "Všetky nastavenia"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Súkromné a Otvorené"
msgid "site_tags"
msgstr "Vyhľadávač, Q-Gato, Spitfire"
msgid "search"
msgstr "Vyhľadávanie"
msgid "web"
msgstr "Web"
msgid "image"
msgstr "Obrázok"
msgid "images"
msgstr "Obrázky"
msgid "video"
msgstr "Video"
msgid "videos"
msgstr "Videá"
msgid "forum"
msgstr "Fórum"
msgid "forums"
msgstr "Fóra"
msgid "map"
msgstr "Mapa"
msgid "maps"
msgstr "Mapy"
msgid "file"
msgstr "Súbor"
msgid "torrents"
msgstr "Torrenty"
msgid "searching_for_new_results"
msgstr "Hľadám nové výsledky..."
msgid "previous"
msgstr "Predchádzajúce"
msgid "next"
msgstr "Ďalšie"
msgid "fetched_in"
msgstr "Načítané za %s sekúnd"
msgid "sort_seeders"
msgstr "Zoradiť podľa seedrov"
msgid "sort_leechers"
msgstr "Zoradiť podľa leecherov"
msgid "sort_lth"
msgstr "Veľkosť (od najmenšieho po najväčšie)"
msgid "sort_htl"
msgstr "Veľkosť (od najväčšieho po najmenšie)"
msgid "category_all"
msgstr "Všetky kategórie"
msgid "category_movie"
msgstr "Filmy"
msgid "category_audiobook"
msgstr "Audioknihy"
msgid "category_tv"
msgstr "Televízne seriály"
msgid "category_games"
msgstr "Hry"
msgid "category_software"
msgstr "Softvér"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Hudba"
msgid "category_xxx"
msgstr "XXX (pre dospelých)"
msgid "apply_settings"
msgstr "Použiť nastavenia"
msgid "error"
msgstr "Chyba"
msgid "views"
msgstr "Zobrazenia"
msgid "seeders"
msgstr "Seedri"
msgid "leechers"
msgstr "Leechri"
msgid "no_results_found"
msgstr "Pre '%s' neboli nájdené žiadne výsledky."
msgid "suggest_rephrase"
msgstr "Skúste formulovať inak alebo opraviť chyby."
msgid "streets"
msgstr "Ulice"
msgid "satellite"
msgstr "Satelit"
msgid "esri_satellite"
msgstr "ESRI Satelit"
msgid "topographic"
msgstr "Topografické"
msgid "locate_me"
msgstr "Nájsť moju polohu"
msgid "you_are_within"
msgstr "Nachádzate sa vo vzdialenosti "
msgid "meters_from_point"
msgstr "metrov od tohto bodu"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Nastavitve"
msgid "settings"
msgstr "Nastavitve"
msgid "theme"
msgstr "Tema"
msgid "theme_dark"
msgstr "Temna"
msgid "theme_light"
msgstr "Svetla"
msgid "theme_night"
msgstr "Nočna"
msgid "theme_black"
msgstr "Črna"
msgid "theme_mocha"
msgstr "Moka"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Varno iskanje"
msgid "off"
msgstr "Izklopljeno"
msgid "on"
msgstr "Vklopljeno"
msgid "site_language"
msgstr "Jezik spletnega mesta"
msgid "search_language"
msgstr "Jezik iskanja"
msgid "any_language"
msgstr "Kakršen koli jezik"
msgid "no_results"
msgstr "Za '%s' ni bilo najdenih rezultatov. Poskusite z drugimi ključnimi besedami."
msgid "no_more_results"
msgstr "Zdi se, da so to vsi rezultati."
msgid "safe_search_off"
msgstr "Varno iskanje je izklopljeno"
msgid "safe_search_on"
msgstr "Varno iskanje je vklopljeno"
msgid "save_settings"
msgstr "Shrani nastavitve"
msgid "all_settings"
msgstr "Vse nastavitve"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Zasebno in Odprto"
msgid "site_tags"
msgstr "Iskalnik, Q-Gato, Spitfire"
msgid "search"
msgstr "Iskanje"
msgid "web"
msgstr "Splet"
msgid "image"
msgstr "Slika"
msgid "images"
msgstr "Slike"
msgid "video"
msgstr "Video"
msgid "videos"
msgstr "Videoposnetki"
msgid "forum"
msgstr "Forum"
msgid "forums"
msgstr "Forumi"
msgid "map"
msgstr "Zemljevid"
msgid "maps"
msgstr "Zemljevidi"
msgid "file"
msgstr "Datoteka"
msgid "torrents"
msgstr "Torrenti"
msgid "searching_for_new_results"
msgstr "Iskanje novih rezultatov..."
msgid "previous"
msgstr "Prejšnje"
msgid "next"
msgstr "Naslednje"
msgid "fetched_in"
msgstr "Pridobljeno v %s sekundah"
msgid "sort_seeders"
msgstr "Razvrsti po seederjih"
msgid "sort_leechers"
msgstr "Razvrsti po leecherjih"
msgid "sort_lth"
msgstr "Velikost (od najmanjše do največje)"
msgid "sort_htl"
msgstr "Velikost (od največje do najmanjše)"
msgid "category_all"
msgstr "Vse kategorije"
msgid "category_movie"
msgstr "Filmi"
msgid "category_audiobook"
msgstr "Avdioknjige"
msgid "category_tv"
msgstr "TV-serije"
msgid "category_games"
msgstr "Igre"
msgid "category_software"
msgstr "Programska oprema"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Glasba"
msgid "category_xxx"
msgstr "XXX (za odrasle)"
msgid "apply_settings"
msgstr "Uporabi nastavitve"
msgid "error"
msgstr "Napaka"
msgid "views"
msgstr "Ogledi"
msgid "seeders"
msgstr "Seederji"
msgid "leechers"
msgstr "Leecherji"
msgid "no_results_found"
msgstr "Za '%s' ni bilo najdenih rezultatov."
msgid "suggest_rephrase"
msgstr "Poskusite preoblikovati ali popraviti napake."
msgid "streets"
msgstr "Ulice"
msgid "satellite"
msgstr "Satelit"
msgid "esri_satellite"
msgstr "ESRI satelit"
msgid "topographic"
msgstr "Topografsko"
msgid "locate_me"
msgstr "Poišči mojo lokacijo"
msgid "you_are_within"
msgstr "Nahajate se znotraj "
msgid "meters_from_point"
msgstr "metrov od te točke"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Подешавања"
msgid "settings"
msgstr "Подешавања"
msgid "theme"
msgstr "Тема"
msgid "theme_dark"
msgstr "Тамна"
msgid "theme_light"
msgstr "Светла"
msgid "theme_night"
msgstr "Ноћна"
msgid "theme_black"
msgstr "Црна"
msgid "theme_mocha"
msgstr "Мока"
msgid "theme_latte"
msgstr "Лате"
msgid "safe_search"
msgstr "Безбедна претрага"
msgid "off"
msgstr "Искључено"
msgid "on"
msgstr "Укључено"
msgid "site_language"
msgstr "Језик сајта"
msgid "search_language"
msgstr "Језик претраге"
msgid "any_language"
msgstr "Сваки језик"
msgid "no_results"
msgstr "Нема резултата за '%s'. Пробајте друге кључне речи."
msgid "no_more_results"
msgstr "Изгледа да је ово крај резултата."
msgid "safe_search_off"
msgstr "Безбедна претрага је искључена"
msgid "safe_search_on"
msgstr "Безбедна претрага је укључена"
msgid "save_settings"
msgstr "Сачувај подешавања"
msgid "all_settings"
msgstr "Сва подешавања"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Приватно и Отворено"
msgid "site_tags"
msgstr "Претраживач, Q-Gato, Spitfire"
msgid "search"
msgstr "Претрага"
msgid "web"
msgstr "Веб"
msgid "image"
msgstr "Слика"
msgid "images"
msgstr "Слике"
msgid "video"
msgstr "Видео"
msgid "videos"
msgstr "Видеа"
msgid "forum"
msgstr "Форум"
msgid "forums"
msgstr "Форуми"
msgid "map"
msgstr "Мапа"
msgid "maps"
msgstr "Мапе"
msgid "file"
msgstr "Фајл"
msgid "torrents"
msgstr "Торенти"
msgid "searching_for_new_results"
msgstr "Тражење нових резултата..."
msgid "previous"
msgstr "Претходно"
msgid "next"
msgstr "Следеће"
msgid "fetched_in"
msgstr "Преузето за %s секунди"
msgid "sort_seeders"
msgstr "Сортирај по сеедерима"
msgid "sort_leechers"
msgstr "Сортирај по личерима"
msgid "sort_lth"
msgstr "Величина (од мање ка већој)"
msgid "sort_htl"
msgstr "Величина (од веће ка мањој)"
msgid "category_all"
msgstr "Све категорије"
msgid "category_movie"
msgstr "Филмови"
msgid "category_audiobook"
msgstr "Аудио књиге"
msgid "category_tv"
msgstr "ТВ серије"
msgid "category_games"
msgstr "Игре"
msgid "category_software"
msgstr "Софтвер"
msgid "category_anime"
msgstr "Аниме"
msgid "category_music"
msgstr "Музика"
msgid "category_xxx"
msgstr "XXX (за одрасле)"
msgid "apply_settings"
msgstr "Примени подешавања"
msgid "error"
msgstr "Грешка"
msgid "views"
msgstr "Прегледи"
msgid "seeders"
msgstr "Сеедери"
msgid "leechers"
msgstr "Личери"
msgid "no_results_found"
msgstr "Нема резултата за претрагу '%s'."
msgid "suggest_rephrase"
msgstr "Покушајте да преправите или исправите грешке."
msgid "streets"
msgstr "Улице"
msgid "satellite"
msgstr "Сателит"
msgid "esri_satellite"
msgstr "ESRI сателит"
msgid "topographic"
msgstr "Топографска"
msgid "locate_me"
msgstr "Пронађи моју локацију"
msgid "you_are_within"
msgstr "Налазите се на удаљености од "
msgid "meters_from_point"
msgstr "метара од ове тачке"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Inställningar"
msgid "settings"
msgstr "Inställningar"
msgid "theme"
msgstr "Tema"
msgid "theme_dark"
msgstr "Mörkt"
msgid "theme_light"
msgstr "Ljust"
msgid "theme_night"
msgstr "Natt"
msgid "theme_black"
msgstr "Svart"
msgid "theme_mocha"
msgstr "Mokka"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Säker sökning"
msgid "off"
msgstr "Av"
msgid "on"
msgstr "På"
msgid "site_language"
msgstr "Webbplatsens språk"
msgid "search_language"
msgstr "Sökspråk"
msgid "any_language"
msgstr "Vilket språk som helst"
msgid "no_results"
msgstr "Inga resultat hittades för '%s'. Försök med andra sökord."
msgid "no_more_results"
msgstr "Det verkar vara slutet på resultaten."
msgid "safe_search_off"
msgstr "Säker sökning är avstängd"
msgid "safe_search_on"
msgstr "Säker sökning är påslagen"
msgid "save_settings"
msgstr "Spara inställningar"
msgid "all_settings"
msgstr "Alla inställningar"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Privat och Öppen"
msgid "site_tags"
msgstr "Sökmotor, Q-Gato, Spitfire"
msgid "search"
msgstr "Sök"
msgid "web"
msgstr "Webb"
msgid "image"
msgstr "Bild"
msgid "images"
msgstr "Bilder"
msgid "video"
msgstr "Video"
msgid "videos"
msgstr "Videor"
msgid "forum"
msgstr "Forum"
msgid "forums"
msgstr "Forum"
msgid "map"
msgstr "Karta"
msgid "maps"
msgstr "Kartor"
msgid "file"
msgstr "Fil"
msgid "torrents"
msgstr "Torrents"
msgid "searching_for_new_results"
msgstr "Söker efter nya resultat..."
msgid "previous"
msgstr "Föregående"
msgid "next"
msgstr "Nästa"
msgid "fetched_in"
msgstr "Hämtad på %s sekunder"
msgid "sort_seeders"
msgstr "Sortera efter seeders"
msgid "sort_leechers"
msgstr "Sortera efter leechers"
msgid "sort_lth"
msgstr "Storlek (minsta till största)"
msgid "sort_htl"
msgstr "Storlek (största till minsta)"
msgid "category_all"
msgstr "Alla kategorier"
msgid "category_movie"
msgstr "Filmer"
msgid "category_audiobook"
msgstr "Ljudböcker"
msgid "category_tv"
msgstr "TV-serier"
msgid "category_games"
msgstr "Spel"
msgid "category_software"
msgstr "Programvara"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Musik"
msgid "category_xxx"
msgstr "XXX (vuxen)"
msgid "apply_settings"
msgstr "Tillämpa inställningar"
msgid "error"
msgstr "Fel"
msgid "views"
msgstr "Visningar"
msgid "seeders"
msgstr "Seeders"
msgid "leechers"
msgstr "Leechers"
msgid "no_results_found"
msgstr "Din sökning på '%s' gav inga resultat."
msgid "suggest_rephrase"
msgstr "Försök att formulera om eller rätta till fel."
msgid "streets"
msgstr "Gator"
msgid "satellite"
msgstr "Satellit"
msgid "esri_satellite"
msgstr "ESRI Satellit"
msgid "topographic"
msgstr "Topografisk"
msgid "locate_me"
msgstr "Hitta mig"
msgid "you_are_within"
msgstr "Du är inom "
msgid "meters_from_point"
msgstr "meter från denna punkt"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Mipangilio"
msgid "settings"
msgstr "Mipangilio"
msgid "theme"
msgstr "Mandhari"
msgid "theme_dark"
msgstr "Giza"
msgid "theme_light"
msgstr "Mwanga"
msgid "theme_night"
msgstr "Usiku"
msgid "theme_black"
msgstr "Nyeusi"
msgid "theme_mocha"
msgstr "Mocha"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Utafutaji Salama"
msgid "off"
msgstr "Zima"
msgid "on"
msgstr "Washa"
msgid "site_language"
msgstr "Lugha ya Tovuti"
msgid "search_language"
msgstr "Lugha ya Utafutaji"
msgid "any_language"
msgstr "Lugha Yoyote"
msgid "no_results"
msgstr "Hakuna matokeo yaliyopatikana kwa '%s'. Jaribu maneno mengine."
msgid "no_more_results"
msgstr "Inaonekana haya ndiyo matokeo yote."
msgid "safe_search_off"
msgstr "Utafutaji salama umezimwa"
msgid "safe_search_on"
msgstr "Utafutaji salama umewashwa"
msgid "save_settings"
msgstr "Hifadhi Mipangilio"
msgid "all_settings"
msgstr "Mipangilio Yote"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Binafsi na Wazi"
msgid "site_tags"
msgstr "Injini ya Utafutaji, Q-Gato, Spitfire"
msgid "search"
msgstr "Tafuta"
msgid "web"
msgstr "Wavuti"
msgid "image"
msgstr "Picha"
msgid "images"
msgstr "Picha"
msgid "video"
msgstr "Video"
msgid "videos"
msgstr "Video"
msgid "forum"
msgstr "Jukwaa"
msgid "forums"
msgstr "Majukwaa"
msgid "map"
msgstr "Ramani"
msgid "maps"
msgstr "Ramani"
msgid "file"
msgstr "Faili"
msgid "torrents"
msgstr "Torenti"
msgid "searching_for_new_results"
msgstr "Inatafuta matokeo mapya..."
msgid "previous"
msgstr "Ya awali"
msgid "next"
msgstr "Ifuatayo"
msgid "fetched_in"
msgstr "Imepatikana kwa sekunde %s"
msgid "sort_seeders"
msgstr "Panga kwa seeders"
msgid "sort_leechers"
msgstr "Panga kwa leechers"
msgid "sort_lth"
msgstr "Ukubwa (ndogo hadi kubwa)"
msgid "sort_htl"
msgstr "Ukubwa (kubwa hadi ndogo)"
msgid "category_all"
msgstr "Kategoria Zote"
msgid "category_movie"
msgstr "Filamu"
msgid "category_audiobook"
msgstr "Vitabu vya Sauti"
msgid "category_tv"
msgstr "Vipindi vya TV"
msgid "category_games"
msgstr "Michezo"
msgid "category_software"
msgstr "Programu"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Muziki"
msgid "category_xxx"
msgstr "XXX (Watu Wazima)"
msgid "apply_settings"
msgstr "Tumia Mipangilio"
msgid "error"
msgstr "Hitilafu"
msgid "views"
msgstr "Maoni"
msgid "seeders"
msgstr "Seeders"
msgid "leechers"
msgstr "Leechers"
msgid "no_results_found"
msgstr "Hakuna matokeo yaliyopatikana kwa '%s'."
msgid "suggest_rephrase"
msgstr "Jaribu kuandika upya au kusahihisha makosa."
msgid "streets"
msgstr "Mitaa"
msgid "satellite"
msgstr "Setilaiti"
msgid "esri_satellite"
msgstr "Setilaiti ya ESRI"
msgid "topographic"
msgstr "Topografia"
msgid "locate_me"
msgstr "Nipate"
msgid "you_are_within"
msgstr "Uko ndani ya "
msgid "meters_from_point"
msgstr "mita kutoka eneo hili"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "การตั้งค่า"
msgid "settings"
msgstr "การตั้งค่า"
msgid "theme"
msgstr "ธีม"
msgid "theme_dark"
msgstr "มืด"
msgid "theme_light"
msgstr "สว่าง"
msgid "theme_night"
msgstr "กลางคืน"
msgid "theme_black"
msgstr "สีดำ"
msgid "theme_mocha"
msgstr "มอคค่า"
msgid "theme_latte"
msgstr "ลาเต้"
msgid "safe_search"
msgstr "การค้นหาปลอดภัย"
msgid "off"
msgstr "ปิด"
msgid "on"
msgstr "เปิด"
msgid "site_language"
msgstr "ภาษาของเว็บไซต์"
msgid "search_language"
msgstr "ภาษาการค้นหา"
msgid "any_language"
msgstr "ภาษาใดก็ได้"
msgid "no_results"
msgstr "ไม่พบผลลัพธ์สำหรับ '%s' ลองใช้คำค้นหาอื่น"
msgid "no_more_results"
msgstr "ดูเหมือนจะถึงจุดสิ้นสุดของผลลัพธ์แล้ว"
msgid "safe_search_off"
msgstr "การค้นหาปลอดภัยถูกปิด"
msgid "safe_search_on"
msgstr "การค้นหาปลอดภัยถูกเปิด"
msgid "save_settings"
msgstr "บันทึกการตั้งค่า"
msgid "all_settings"
msgstr "การตั้งค่าทั้งหมด"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - ส่วนตัวและเปิดกว้าง"
msgid "site_tags"
msgstr "เครื่องมือค้นหา, Q-Gato, Spitfire"
msgid "search"
msgstr "ค้นหา"
msgid "web"
msgstr "เว็บ"
msgid "image"
msgstr "รูปภาพ"
msgid "images"
msgstr "รูปภาพ"
msgid "video"
msgstr "วิดีโอ"
msgid "videos"
msgstr "วิดีโอ"
msgid "forum"
msgstr "ฟอรัม"
msgid "forums"
msgstr "ฟอรัม"
msgid "map"
msgstr "แผนที่"
msgid "maps"
msgstr "แผนที่"
msgid "file"
msgstr "ไฟล์"
msgid "torrents"
msgstr "ทอร์เรนต์"
msgid "searching_for_new_results"
msgstr "กำลังค้นหาผลลัพธ์ใหม่..."
msgid "previous"
msgstr "ก่อนหน้า"
msgid "next"
msgstr "ถัดไป"
msgid "fetched_in"
msgstr "ดึงข้อมูลใน %s วินาที"
msgid "sort_seeders"
msgstr "จัดเรียงตามซีดเดอร์"
msgid "sort_leechers"
msgstr "จัดเรียงตามลีเชอร์"
msgid "sort_lth"
msgstr "ขนาด (เล็กไปใหญ่)"
msgid "sort_htl"
msgstr "ขนาด (ใหญ่ไปเล็ก)"
msgid "category_all"
msgstr "ทุกหมวดหมู่"
msgid "category_movie"
msgstr "ภาพยนตร์"
msgid "category_audiobook"
msgstr "หนังสือเสียง"
msgid "category_tv"
msgstr "รายการทีวี"
msgid "category_games"
msgstr "เกม"
msgid "category_software"
msgstr "ซอฟต์แวร์"
msgid "category_anime"
msgstr "อนิเมะ"
msgid "category_music"
msgstr "เพลง"
msgid "category_xxx"
msgstr "XXX (สำหรับผู้ใหญ่)"
msgid "apply_settings"
msgstr "ใช้การตั้งค่า"
msgid "error"
msgstr "ข้อผิดพลาด"
msgid "views"
msgstr "การดู"
msgid "seeders"
msgstr "ซีดเดอร์"
msgid "leechers"
msgstr "ลีเชอร์"
msgid "no_results_found"
msgstr "ไม่พบผลลัพธ์สำหรับการค้นหา '%s'"
msgid "suggest_rephrase"
msgstr "ลองปรับคำค้นหาหรือแก้ไขข้อผิดพลาด"
msgid "streets"
msgstr "ถนน"
msgid "satellite"
msgstr "ดาวเทียม"
msgid "esri_satellite"
msgstr "ดาวเทียม ESRI"
msgid "topographic"
msgstr "ภูมิประเทศ"
msgid "locate_me"
msgstr "ค้นหาตำแหน่งของฉัน"
msgid "you_are_within"
msgstr "คุณอยู่ภายในระยะ "
msgid "meters_from_point"
msgstr "เมตรจากจุดนี้"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Mga Setting"
msgid "settings"
msgstr "Mga Setting"
msgid "theme"
msgstr "Tema"
msgid "theme_dark"
msgstr "Madilim"
msgid "theme_light"
msgstr "Maliwanag"
msgid "theme_night"
msgstr "Gabi"
msgid "theme_black"
msgstr "Itim"
msgid "theme_mocha"
msgstr "Mocha"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Ligtas na Paghahanap"
msgid "off"
msgstr "Naka-off"
msgid "on"
msgstr "Naka-on"
msgid "site_language"
msgstr "Wika ng Website"
msgid "search_language"
msgstr "Wika ng Paghahanap"
msgid "any_language"
msgstr "Anumang Wika"
msgid "no_results"
msgstr "Walang nahanap na resulta para sa '%s'. Subukang gumamit ng ibang mga keyword."
msgid "no_more_results"
msgstr "Mukhang ito na ang dulo ng mga resulta."
msgid "safe_search_off"
msgstr "Ligtas na Paghahanap ay naka-off"
msgid "safe_search_on"
msgstr "Ligtas na Paghahanap ay naka-on"
msgid "save_settings"
msgstr "I-save ang Mga Setting"
msgid "all_settings"
msgstr "Lahat ng Mga Setting"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Pribado at Buksan"
msgid "site_tags"
msgstr "Search Engine, Q-Gato, Spitfire"
msgid "search"
msgstr "Paghahanap"
msgid "web"
msgstr "Web"
msgid "image"
msgstr "Larawan"
msgid "images"
msgstr "Mga Larawan"
msgid "video"
msgstr "Video"
msgid "videos"
msgstr "Mga Video"
msgid "forum"
msgstr "Forum"
msgid "forums"
msgstr "Mga Forum"
msgid "map"
msgstr "Mapa"
msgid "maps"
msgstr "Mga Mapa"
msgid "file"
msgstr "File"
msgid "torrents"
msgstr "Mga Torrents"
msgid "searching_for_new_results"
msgstr "Naghahanap ng mga bagong resulta..."
msgid "previous"
msgstr "Nakaraan"
msgid "next"
msgstr "Susunod"
msgid "fetched_in"
msgstr "Nakuha sa %s segundo"
msgid "sort_seeders"
msgstr "Ayusin ayon sa seeders"
msgid "sort_leechers"
msgstr "Ayusin ayon sa leechers"
msgid "sort_lth"
msgstr "Sukat (maliit hanggang malaki)"
msgid "sort_htl"
msgstr "Sukat (malaki hanggang maliit)"
msgid "category_all"
msgstr "Lahat ng Kategorya"
msgid "category_movie"
msgstr "Pelikula"
msgid "category_audiobook"
msgstr "Mga Audiobook"
msgid "category_tv"
msgstr "TV Series"
msgid "category_games"
msgstr "Mga Laro"
msgid "category_software"
msgstr "Software"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Musika"
msgid "category_xxx"
msgstr "XXX (Pang-matanda)"
msgid "apply_settings"
msgstr "I-apply ang Mga Setting"
msgid "error"
msgstr "Error"
msgid "views"
msgstr "Mga View"
msgid "seeders"
msgstr "Seeders"
msgid "leechers"
msgstr "Leechers"
msgid "no_results_found"
msgstr "Ang iyong paghahanap para sa '%s' ay walang nahanap na resulta."
msgid "suggest_rephrase"
msgstr "Subukang muling ipahayag o itama ang mga pagkakamali."
msgid "streets"
msgstr "Mga Kalye"
msgid "satellite"
msgstr "Satelite"
msgid "esri_satellite"
msgstr "ESRI Satelite"
msgid "topographic"
msgstr "Topograpiko"
msgid "locate_me"
msgstr "Hanapin ang aking lokasyon"
msgid "you_are_within"
msgstr "Ikaw ay nasa loob ng "
msgid "meters_from_point"
msgstr "metro mula sa puntong ito"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Ayarlar"
msgid "settings"
msgstr "Ayarlar"
msgid "theme"
msgstr "Tema"
msgid "theme_dark"
msgstr "Koyu"
msgid "theme_light"
msgstr "Açık"
msgid "theme_night"
msgstr "Gece"
msgid "theme_black"
msgstr "Siyah"
msgid "theme_mocha"
msgstr "Mocha"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Güvenli Arama"
msgid "off"
msgstr "Kapalı"
msgid "on"
msgstr "Açık"
msgid "site_language"
msgstr "Site Dili"
msgid "search_language"
msgstr "Arama Dili"
msgid "any_language"
msgstr "Herhangi Bir Dil"
msgid "no_results"
msgstr "'%s' için sonuç bulunamadı. Farklı anahtar kelimeler deneyin."
msgid "no_more_results"
msgstr "Görünüşe göre bu, sonuçların sonu."
msgid "safe_search_off"
msgstr "Güvenli Arama kapalı"
msgid "safe_search_on"
msgstr "Güvenli Arama açık"
msgid "save_settings"
msgstr "Ayarları Kaydet"
msgid "all_settings"
msgstr "Tüm Ayarlar"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Özel ve Açık"
msgid "site_tags"
msgstr "Arama Motoru, Q-Gato, Spitfire"
msgid "search"
msgstr "Arama"
msgid "web"
msgstr "Web"
msgid "image"
msgstr "Görüntü"
msgid "images"
msgstr "Görüntüler"
msgid "video"
msgstr "Video"
msgid "videos"
msgstr "Videolar"
msgid "forum"
msgstr "Forum"
msgid "forums"
msgstr "Forumlar"
msgid "map"
msgstr "Harita"
msgid "maps"
msgstr "Haritalar"
msgid "file"
msgstr "Dosya"
msgid "torrents"
msgstr "Torrentler"
msgid "searching_for_new_results"
msgstr "Yeni sonuçlar aranıyor..."
msgid "previous"
msgstr "Önceki"
msgid "next"
msgstr "Sonraki"
msgid "fetched_in"
msgstr "%s saniyede alındı"
msgid "sort_seeders"
msgstr "Seeders'a göre sırala"
msgid "sort_leechers"
msgstr "Leechers'a göre sırala"
msgid "sort_lth"
msgstr "Boyut (küçükten büyüğe)"
msgid "sort_htl"
msgstr "Boyut (büyükten küçüğe)"
msgid "category_all"
msgstr "Tüm Kategoriler"
msgid "category_movie"
msgstr "Filmler"
msgid "category_audiobook"
msgstr "Sesli Kitaplar"
msgid "category_tv"
msgstr "TV Dizileri"
msgid "category_games"
msgstr "Oyunlar"
msgid "category_software"
msgstr "Yazılım"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Müzik"
msgid "category_xxx"
msgstr "XXX (Yetişkin)"
msgid "apply_settings"
msgstr "Ayarları Uygula"
msgid "error"
msgstr "Hata"
msgid "views"
msgstr "Görüntüleme"
msgid "seeders"
msgstr "Seeders"
msgid "leechers"
msgstr "Leechers"
msgid "no_results_found"
msgstr "'%s' için arama sonuç vermedi."
msgid "suggest_rephrase"
msgstr "Farklı bir ifade deneyin veya hataları düzeltin."
msgid "streets"
msgstr "Sokaklar"
msgid "satellite"
msgstr "Uydu"
msgid "esri_satellite"
msgstr "ESRI Uydu"
msgid "topographic"
msgstr "Topografik"
msgid "locate_me"
msgstr "Beni Bul"
msgid "you_are_within"
msgstr "Şuradasınız: "
msgid "meters_from_point"
msgstr "metre bu noktadan"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Налаштування"
msgid "settings"
msgstr "Налаштування"
msgid "theme"
msgstr "Тема"
msgid "theme_dark"
msgstr "Темна"
msgid "theme_light"
msgstr "Світла"
msgid "theme_night"
msgstr "Нічна"
msgid "theme_black"
msgstr "Чорна"
msgid "theme_mocha"
msgstr "Мокка"
msgid "theme_latte"
msgstr "Латте"
msgid "safe_search"
msgstr "Безпечний пошук"
msgid "off"
msgstr "Вимкнено"
msgid "on"
msgstr "Увімкнено"
msgid "site_language"
msgstr "Мова сайту"
msgid "search_language"
msgstr "Мова пошуку"
msgid "any_language"
msgstr "Будь-яка мова"
msgid "no_results"
msgstr "Результатів за запитом '%s' не знайдено. Спробуйте інші ключові слова."
msgid "no_more_results"
msgstr "Схоже, це всі результати."
msgid "safe_search_off"
msgstr "Безпечний пошук вимкнено"
msgid "safe_search_on"
msgstr "Безпечний пошук увімкнено"
msgid "save_settings"
msgstr "Зберегти налаштування"
msgid "all_settings"
msgstr "Усі налаштування"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Приватний і Відкритий"
msgid "site_tags"
msgstr "Пошукова система, Q-Gato, Spitfire"
msgid "search"
msgstr "Пошук"
msgid "web"
msgstr "Веб"
msgid "image"
msgstr "Зображення"
msgid "images"
msgstr "Зображення"
msgid "video"
msgstr "Відео"
msgid "videos"
msgstr "Відео"
msgid "forum"
msgstr "Форум"
msgid "forums"
msgstr "Форуми"
msgid "map"
msgstr "Карта"
msgid "maps"
msgstr "Карти"
msgid "file"
msgstr "Файл"
msgid "torrents"
msgstr "Торренти"
msgid "searching_for_new_results"
msgstr "Шукаю нові результати..."
msgid "previous"
msgstr "Попередній"
msgid "next"
msgstr "Наступний"
msgid "fetched_in"
msgstr "Отримано за %s секунд"
msgid "sort_seeders"
msgstr "Сортувати за сідерами"
msgid "sort_leechers"
msgstr "Сортувати за лічерами"
msgid "sort_lth"
msgstr "Розмір (від меншого до більшого)"
msgid "sort_htl"
msgstr "Розмір (від більшого до меншого)"
msgid "category_all"
msgstr "Усі категорії"
msgid "category_movie"
msgstr "Фільми"
msgid "category_audiobook"
msgstr "Аудіокниги"
msgid "category_tv"
msgstr "Телесеріали"
msgid "category_games"
msgstr "Ігри"
msgid "category_software"
msgstr "Програмне забезпечення"
msgid "category_anime"
msgstr "Аніме"
msgid "category_music"
msgstr "Музика"
msgid "category_xxx"
msgstr "XXX (для дорослих)"
msgid "apply_settings"
msgstr "Застосувати налаштування"
msgid "error"
msgstr "Помилка"
msgid "views"
msgstr "Перегляди"
msgid "seeders"
msgstr "Сідери"
msgid "leechers"
msgstr "Лічери"
msgid "no_results_found"
msgstr "Пошук за запитом '%s' не дав результатів."
msgid "suggest_rephrase"
msgstr "Спробуйте переформулювати або виправити помилки."
msgid "streets"
msgstr "Вулиці"
msgid "satellite"
msgstr "Супутник"
msgid "esri_satellite"
msgstr "Супутник ESRI"
msgid "topographic"
msgstr "Топографічна"
msgid "locate_me"
msgstr "Знайти мене"
msgid "you_are_within"
msgstr "Ви перебуваєте в межах "
msgid "meters_from_point"
msgstr "метрів від цієї точки"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "Cài đặt"
msgid "settings"
msgstr "Cài đặt"
msgid "theme"
msgstr "Chủ đề"
msgid "theme_dark"
msgstr "Tối"
msgid "theme_light"
msgstr "Sáng"
msgid "theme_night"
msgstr "Ban đêm"
msgid "theme_black"
msgstr "Đen"
msgid "theme_mocha"
msgstr "Mocha"
msgid "theme_latte"
msgstr "Latte"
msgid "safe_search"
msgstr "Tìm kiếm an toàn"
msgid "off"
msgstr "Tắt"
msgid "on"
msgstr "Bật"
msgid "site_language"
msgstr "Ngôn ngữ trang web"
msgid "search_language"
msgstr "Ngôn ngữ tìm kiếm"
msgid "any_language"
msgstr "Bất kỳ ngôn ngữ nào"
msgid "no_results"
msgstr "Không tìm thấy kết quả nào cho '%s'. Hãy thử từ khóa khác."
msgid "no_more_results"
msgstr "Có vẻ như đây là tất cả các kết quả."
msgid "safe_search_off"
msgstr "Tìm kiếm an toàn đã tắt"
msgid "safe_search_on"
msgstr "Tìm kiếm an toàn đã bật"
msgid "save_settings"
msgstr "Lưu cài đặt"
msgid "all_settings"
msgstr "Tất cả cài đặt"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - Riêng tư và Mở"
msgid "site_tags"
msgstr "Công cụ tìm kiếm, Q-Gato, Spitfire"
msgid "search"
msgstr "Tìm kiếm"
msgid "web"
msgstr "Web"
msgid "image"
msgstr "Hình ảnh"
msgid "images"
msgstr "Hình ảnh"
msgid "video"
msgstr "Video"
msgid "videos"
msgstr "Video"
msgid "forum"
msgstr "Diễn đàn"
msgid "forums"
msgstr "Diễn đàn"
msgid "map"
msgstr "Bản đồ"
msgid "maps"
msgstr "Bản đồ"
msgid "file"
msgstr "Tệp"
msgid "torrents"
msgstr "Torrents"
msgid "searching_for_new_results"
msgstr "Đang tìm kiếm kết quả mới..."
msgid "previous"
msgstr "Trước"
msgid "next"
msgstr "Tiếp theo"
msgid "fetched_in"
msgstr "Đã tìm trong %s giây"
msgid "sort_seeders"
msgstr "Sắp xếp theo seeders"
msgid "sort_leechers"
msgstr "Sắp xếp theo leechers"
msgid "sort_lth"
msgstr "Kích thước (nhỏ đến lớn)"
msgid "sort_htl"
msgstr "Kích thước (lớn đến nhỏ)"
msgid "category_all"
msgstr "Tất cả danh mục"
msgid "category_movie"
msgstr "Phim"
msgid "category_audiobook"
msgstr "Sách nói"
msgid "category_tv"
msgstr "Phim truyền hình"
msgid "category_games"
msgstr "Trò chơi"
msgid "category_software"
msgstr "Phần mềm"
msgid "category_anime"
msgstr "Anime"
msgid "category_music"
msgstr "Nhạc"
msgid "category_xxx"
msgstr "XXX (Dành cho người lớn)"
msgid "apply_settings"
msgstr "Áp dụng cài đặt"
msgid "error"
msgstr "Lỗi"
msgid "views"
msgstr "Lượt xem"
msgid "seeders"
msgstr "Seeders"
msgid "leechers"
msgstr "Leechers"
msgid "no_results_found"
msgstr "Không tìm thấy kết quả cho '%s'."
msgid "suggest_rephrase"
msgstr "Hãy thử diễn đạt lại hoặc sửa lỗi."
msgid "streets"
msgstr "Đường phố"
msgid "satellite"
msgstr "Vệ tinh"
msgid "esri_satellite"
msgstr "Vệ tinh ESRI"
msgid "topographic"
msgstr "Địa hình"
msgid "locate_me"
msgstr "Tìm vị trí của tôi"
msgid "you_are_within"
msgstr "Bạn đang ở trong phạm vi "
msgid "meters_from_point"
msgstr "mét từ điểm này"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "设置"
msgid "settings"
msgstr "设置"
msgid "theme"
msgstr "主题"
msgid "theme_dark"
msgstr "深色"
msgid "theme_light"
msgstr "浅色"
msgid "theme_night"
msgstr "夜间"
msgid "theme_black"
msgstr "黑色"
msgid "theme_mocha"
msgstr "摩卡"
msgid "theme_latte"
msgstr "拿铁"
msgid "safe_search"
msgstr "安全搜索"
msgid "off"
msgstr "关闭"
msgid "on"
msgstr "开启"
msgid "site_language"
msgstr "网站语言"
msgid "search_language"
msgstr "搜索语言"
msgid "any_language"
msgstr "任何语言"
msgid "no_results"
msgstr "未找到与 '%s' 匹配的结果。请尝试其他关键字。"
msgid "no_more_results"
msgstr "看起来已经到结果的末尾了。"
msgid "safe_search_off"
msgstr "安全搜索已关闭"
msgid "safe_search_on"
msgstr "安全搜索已开启"
msgid "save_settings"
msgstr "保存设置"
msgid "all_settings"
msgstr "所有设置"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - 私密且开放"
msgid "site_tags"
msgstr "搜索引擎, Q-Gato, Spitfire"
msgid "search"
msgstr "搜索"
msgid "web"
msgstr "网页"
msgid "image"
msgstr "图片"
msgid "images"
msgstr "图片集"
msgid "video"
msgstr "视频"
msgid "videos"
msgstr "视频集"
msgid "forum"
msgstr "论坛"
msgid "forums"
msgstr "论坛"
msgid "map"
msgstr "地图"
msgid "maps"
msgstr "地图集"
msgid "file"
msgstr "文件"
msgid "torrents"
msgstr "种子"
msgid "searching_for_new_results"
msgstr "正在搜索新结果..."
msgid "previous"
msgstr "上一页"
msgid "next"
msgstr "下一页"
msgid "fetched_in"
msgstr "%s 秒内获取"
msgid "sort_seeders"
msgstr "排序:上传者"
msgid "sort_leechers"
msgstr "排序:下载者"
msgid "sort_lth"
msgstr "大小(小到大)"
msgid "sort_htl"
msgstr "大小(大到小)"
msgid "category_all"
msgstr "所有分类"
msgid "category_movie"
msgstr "电影"
msgid "category_audiobook"
msgstr "有声书"
msgid "category_tv"
msgstr "电视剧"
msgid "category_games"
msgstr "游戏"
msgid "category_software"
msgstr "软件"
msgid "category_anime"
msgstr "动漫"
msgid "category_music"
msgstr "音乐"
msgid "category_xxx"
msgstr "XXX成人内容"
msgid "apply_settings"
msgstr "应用设置"
msgid "error"
msgstr "错误"
msgid "views"
msgstr "观看数"
msgid "seeders"
msgstr "上传者"
msgid "leechers"
msgstr "下载者"
msgid "no_results_found"
msgstr "未找到与 '%s' 匹配的结果。"
msgid "suggest_rephrase"
msgstr "尝试重新措辞或检查拼写错误。"
msgid "streets"
msgstr "街道"
msgid "satellite"
msgstr "卫星"
msgid "esri_satellite"
msgstr "ESRI 卫星"
msgid "topographic"
msgstr "地形图"
msgid "locate_me"
msgstr "定位我"
msgid "you_are_within"
msgstr "您距离此点 "
msgid "meters_from_point"
msgstr "米"

View file

@ -0,0 +1,200 @@
msgid "settings_title"
msgstr "設定"
msgid "settings"
msgstr "設定"
msgid "theme"
msgstr "主題"
msgid "theme_dark"
msgstr "深色"
msgid "theme_light"
msgstr "淺色"
msgid "theme_night"
msgstr "夜間"
msgid "theme_black"
msgstr "黑色"
msgid "theme_mocha"
msgstr "摩卡"
msgid "theme_latte"
msgstr "拿鐵"
msgid "safe_search"
msgstr "安全搜尋"
msgid "off"
msgstr "關閉"
msgid "on"
msgstr "開啟"
msgid "site_language"
msgstr "網站語言"
msgid "search_language"
msgstr "搜尋語言"
msgid "any_language"
msgstr "任何語言"
msgid "no_results"
msgstr "未找到符合您的查詢「%s」的結果。請嘗試其他關鍵字。"
msgid "no_more_results"
msgstr "看來已經到結果的結尾了。"
msgid "safe_search_off"
msgstr "安全搜尋已關閉"
msgid "safe_search_on"
msgstr "安全搜尋已開啟"
msgid "save_settings"
msgstr "保存設定"
msgid "all_settings"
msgstr "所有設定"
msgid "site_name"
msgstr "Q-Gato"
msgid "site_description"
msgstr "Q-Gato - 私人且開放"
msgid "site_tags"
msgstr "搜尋引擎, Q-Gato, Spitfire"
msgid "search"
msgstr "搜尋"
msgid "web"
msgstr "網頁"
msgid "image"
msgstr "圖片"
msgid "images"
msgstr "圖片"
msgid "video"
msgstr "影片"
msgid "videos"
msgstr "影片"
msgid "forum"
msgstr "論壇"
msgid "forums"
msgstr "論壇"
msgid "map"
msgstr "地圖"
msgid "maps"
msgstr "地圖"
msgid "file"
msgstr "檔案"
msgid "torrents"
msgstr "種子"
msgid "searching_for_new_results"
msgstr "正在搜尋新結果..."
msgid "previous"
msgstr "上一頁"
msgid "next"
msgstr "下一頁"
msgid "fetched_in"
msgstr "已於 %s 秒內加載"
msgid "sort_seeders"
msgstr "排序(種子數量)"
msgid "sort_leechers"
msgstr "排序(下載數量)"
msgid "sort_lth"
msgstr "排序(由小至大)"
msgid "sort_htl"
msgstr "排序(由大至小)"
msgid "category_all"
msgstr "所有分類"
msgid "category_movie"
msgstr "電影"
msgid "category_audiobook"
msgstr "有聲書"
msgid "category_tv"
msgstr "電視劇"
msgid "category_games"
msgstr "遊戲"
msgid "category_software"
msgstr "軟體"
msgid "category_anime"
msgstr "動畫"
msgid "category_music"
msgstr "音樂"
msgid "category_xxx"
msgstr "成人內容"
msgid "apply_settings"
msgstr "應用設定"
msgid "error"
msgstr "錯誤"
msgid "views"
msgstr "瀏覽次數"
msgid "seeders"
msgstr "種子數量"
msgid "leechers"
msgstr "下載數量"
msgid "no_results_found"
msgstr "未找到符合您的查詢「%s」的結果。"
msgid "suggest_rephrase"
msgstr "請嘗試重述或修正錯誤。"
msgid "streets"
msgstr "街道"
msgid "satellite"
msgstr "衛星"
msgid "esri_satellite"
msgstr "ESRI 衛星"
msgid "topographic"
msgstr "地形"
msgid "locate_me"
msgstr "定位我的位置"
msgid "you_are_within"
msgstr "您在 "
msgid "meters_from_point"
msgstr "公尺範圍內"

View file

@ -161,7 +161,7 @@ func handleSearch(w http.ResponseWriter, r *http.Request) {
// Handle different search types
switch searchType {
case "image":
handleImageSearch(w, settings, query, page)
handleImageSearch(w, r, settings, query, page)
case "video":
handleVideoSearch(w, settings, query, page)
case "map":
@ -214,11 +214,12 @@ func runServer() {
http.HandleFunc("/", handleSearch)
http.HandleFunc("/search", handleSearch)
http.HandleFunc("/suggestions", handleSuggestions)
http.HandleFunc("/imgproxy", handleImageProxy)
// The /imgproxy handler is deprecated, now its handled by /image/
// http.HandleFunc("/imgproxy", handleImageProxy)
http.HandleFunc("/node", handleNodeRequest)
http.HandleFunc("/settings", handleSettings)
http.HandleFunc("/save-settings", handleSaveSettings)
http.HandleFunc("/image_cache/", handleCachedImages)
http.HandleFunc("/image/", handleImageServe)
http.HandleFunc("/image_status", handleImageStatus)
http.HandleFunc("/opensearch.xml", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/opensearchdescription+xml")

View file

@ -63,8 +63,7 @@ func handleSearchImageMessage(msg Message) {
}
log.Printf("Received search-image request. ResponseAddr: %s", searchParams.ResponseAddr)
results := fetchImageResults(searchParams.Query, searchParams.Safe, searchParams.Lang, searchParams.Page)
results := fetchImageResults(searchParams.Query, searchParams.Safe, searchParams.Lang, searchParams.Page, true)
resultsJSON, err := json.Marshal(results)
if err != nil {
log.Printf("Error marshalling search results: %v", err)

42
run.bat
View file

@ -1,6 +1,36 @@
@echo off
setlocal enabledelayedexpansion
rem Initialize variables
set SKIP_CONFIG=""
set PORT=""
set DOMAIN=""
rem Parse arguments
:parse_args
if "%~1"=="" goto end_parse
if "%~1"=="--port" (
set PORT=%~2
shift
shift
goto parse_args
)
if "%~1"=="--domain" (
set DOMAIN=%~2
shift
shift
goto parse_args
)
if "%~1"=="--skip-config-check" (
set SKIP_CONFIG=--skip-config-check
shift
goto parse_args
)
echo Unknown argument: %~1
exit /b 1
:end_parse
rem Use the current directory where the script is executed
pushd %~dp0
@ -10,8 +40,16 @@ for %%f in (*.go) do (
set GO_FILES=!GO_FILES! %%f
)
rem Run the Go program with all the .go files
go run !GO_FILES!
rem Construct the command
set CMD=go run !GO_FILES! !SKIP_CONFIG!
if not "%PORT%"=="" set CMD=!CMD! --port %PORT%
if not "%DOMAIN%"=="" set CMD=!CMD! --domain %DOMAIN%
rem Informative output
echo Starting application with command: !CMD!
rem Run the Go program with the constructed command
call !CMD!
rem Return to the original directory
popd

41
run.sh
View file

@ -1,7 +1,42 @@
#!/bin/sh
# List all go files in this directory
# Initialize variables
SKIP_CONFIG=""
PORT=""
DOMAIN=""
# Parse arguments
while [ $# -gt 0 ]; do
case $1 in
--port)
PORT=$2
shift 2
;;
--domain)
DOMAIN=$2
shift 2
;;
--skip-config-check)
SKIP_CONFIG="--skip-config-check"
shift
;;
*)
echo "Unknown argument: $1"
exit 1
;;
esac
done
# List all Go files in this directory
GO_FILES=$(find . -name '*.go' -print)
# Run the Go program with the specified files first, followed by the remaining files
go run $FILES $GO_FILES
# Construct the command
CMD="go run $GO_FILES $SKIP_CONFIG"
[ -n "$PORT" ] && CMD="$CMD --port $PORT"
[ -n "$DOMAIN" ] && CMD="$CMD --domain $DOMAIN"
# Informative output
echo "Starting application with command: $CMD"
# Run the Go program with the constructed command
eval $CMD

View file

@ -44,8 +44,9 @@ body, html {
color: var(--text-color);
}
body {
visibility: hidden;
button, p {
font-family: 'Inter', Arial, Helvetica, sans-serif;
font-weight: 400;
}
body.menu-open {
@ -259,6 +260,7 @@ body.menu-open {
}
.settings-icon-link-search:hover {
text-decoration: none;
color: var(--blue);
transition: color 0.3s ease;
}

View file

@ -101,8 +101,12 @@ document.addEventListener('DOMContentLoaded', () => {
searchInput.value = query;
resultsWrapper.innerHTML = '';
searchWrapper.classList.remove('wrapper-searching');
const form = searchInput.closest('form');
form ? form.submit() : window.location.href = `/search?q=${encodeURIComponent(query)}&t=web`;
// Retrieve the `t` parameter from the hidden input or set a default
const currentTemplateType = document.querySelector('input[name="t"]').value || 'web';
// Redirect to the appropriate results page
window.location.href = `/search?q=${encodeURIComponent(query)}&t=${encodeURIComponent(currentTemplateType)}`;
}
// Handle clicks on search suggestions

View file

@ -1,21 +1,28 @@
document.addEventListener('DOMContentLoaded', function() {
let viewerOpen = false;
let currentIndex = -1;
let imageList = [];
// Initialize imageList with all images on the page
function initializeImageList() {
imageList = Array.from(document.querySelectorAll('.image img.clickable'));
}
const viewerOverlay = document.getElementById('image-viewer-overlay');
viewerOverlay.innerHTML = `
<div id="image-viewer" class="image_view image_hide">
<div class="image-view-close">
<!-- <button class="btn-nostyle">
<div id="viewer-prev-button" class="material-icons-round icon_visibility clickable image-before">navigate_before</div>
<button class="btn-nostyle" id="viewer-prev-button">
<div class="material-icons-round icon_visibility clickable image-before">navigate_before</div>
</button>
<button class="btn-nostyle">
<div id="viewer-next-button" class="material-icons-round icon_visibility clickable image-next">navigate_next</div>
</button> FIX THIS LATER! --!>
<button class="btn-nostyle">
<div id="viewer-close-button" class="material-icons-round icon_visibility clickable image-close">close</div>
<button class="btn-nostyle" id="viewer-next-button">
<div class="material-icons-round icon_visibility clickable image-next">navigate_next</div>
</button>
<button class="btn-nostyle" id="viewer-close-button">
<div class="material-icons-round icon_visibility clickable image-close">close</div>
</button>
</div>
<a class="image-viewer-link">
<a class="image-viewer-link" id="viewer-image-link" target="_blank">
<div class="view-image" id="viewer-image-container">
<img id="viewer-image" class="view-image-img" src="" alt="">
</div>
@ -23,8 +30,8 @@ document.addEventListener('DOMContentLoaded', function() {
<p class="image-alt" id="viewer-title"></p>
<p>View source: <a id="viewer-source-button" class="image-source" href="" target="_blank"></a></p>
<p>
<a class="full-size" href="#">Show source website</a>
<a class="proxy-size" href="#">Show in fullscreen</a>
<a class="full-size" id="viewer-full-size-link" href="#" target="_blank">Show source website</a>
<a class="proxy-size" id="viewer-proxy-size-link" href="#" target="_blank">Show in fullscreen</a>
</p>
</div>
`;
@ -32,36 +39,45 @@ document.addEventListener('DOMContentLoaded', function() {
const imageView = document.getElementById('image-viewer');
function openImageViewer(element) {
initializeImageList(); // Update the image list
const parentImageDiv = element.closest('.image');
if (!parentImageDiv) return;
const imgElement = parentImageDiv.querySelector('img.clickable');
const fullImageUrl = imgElement.dataset.proxyFull; // Use data-proxy-full for ProxyFull
const thumbnailUrl = imgElement.src; // Use ProxyThumb for the thumbnail
const title = imgElement.alt;
const sourceUrl = parentImageDiv.querySelector('.img_source').href; // Source webpage URL
currentIndex = imageList.findIndex(img => img === parentImageDiv.querySelector('img.clickable'));
if (currentIndex === -1) return;
if (!fullImageUrl || viewerOpen) {
return; // Don't open if data is missing or viewer is already open
}
displayImage(currentIndex);
viewerOpen = true;
viewerOverlay.style.display = 'flex';
imageView.classList.remove('image_hide');
imageView.classList.add('image_show');
}
function displayImage(index) {
if (index < 0 || index >= imageList.length) return;
const imgElement = imageList[index];
const parentImageDiv = imgElement.closest('.image');
const fullImageUrl = imgElement.getAttribute('data-full'); // Use data-full for the full image URL
const title = imgElement.alt || '';
const sourceUrl = parentImageDiv.querySelector('.img_source').href || '#'; // Source webpage URL
const viewerImage = document.getElementById('viewer-image');
const viewerTitle = document.getElementById('viewer-title');
const viewerSourceButton = document.getElementById('viewer-source-button');
const fullSizeLink = imageView.querySelector('.full-size');
const proxySizeLink = imageView.querySelector('.proxy-size');
const fullSizeLink = document.getElementById('viewer-full-size-link');
const proxySizeLink = document.getElementById('viewer-proxy-size-link');
const viewerImageLink = document.getElementById('viewer-image-link');
// Set the viewer image to ProxyFull
// Set the viewer image to the full image URL
viewerImage.src = fullImageUrl;
viewerTitle.textContent = title;
viewerSourceButton.href = sourceUrl;
fullSizeLink.href = sourceUrl; // Link to the source website
proxySizeLink.href = fullImageUrl; // Link to the proxied full-size image
viewerOverlay.style.display = 'flex';
imageView.classList.remove('image_hide');
imageView.classList.add('image_show');
viewerImageLink.href = fullImageUrl; // Make image clickable to open in new tab
}
// Attach event listener to the document body
@ -80,10 +96,30 @@ document.addEventListener('DOMContentLoaded', function() {
imageView.classList.add('image_hide');
viewerOverlay.style.display = 'none';
viewerOpen = false;
currentIndex = -1;
}
// Close viewer on overlay or button click
// Navigation functions
function showPreviousImage() {
if (currentIndex > 0) {
currentIndex--;
displayImage(currentIndex);
}
}
function showNextImage() {
if (currentIndex < imageList.length - 1) {
currentIndex++;
displayImage(currentIndex);
}
}
// Event listeners for navigation and closing
document.getElementById('viewer-close-button').addEventListener('click', closeImageViewer);
document.getElementById('viewer-prev-button').addEventListener('click', showPreviousImage);
document.getElementById('viewer-next-button').addEventListener('click', showNextImage);
// Close viewer when clicking outside the image
viewerOverlay.addEventListener('click', function(e) {
if (e.target === viewerOverlay) {
closeImageViewer();
@ -95,6 +131,10 @@ document.addEventListener('DOMContentLoaded', function() {
if (viewerOverlay.style.display === 'flex') {
if (e.key === 'Escape') {
closeImageViewer();
} else if (e.key === 'ArrowLeft') {
showPreviousImage();
} else if (e.key === 'ArrowRight') {
showNextImage();
}
}
});

View file

@ -8,6 +8,13 @@
{{ end }}
<title>{{ .Query }} - {{ translate "site_name" }}</title>
<link rel="stylesheet" href="/static/css/style.css">
<noscript>
<style>
img.placeholder-img {
display: none;
}
</style>
</noscript>
<link rel="stylesheet" href="/static/css/style-fixedwidth.css">
<link rel="stylesheet" href="/static/css/{{.Theme}}.css">
<link rel="search" type="application/opensearchdescription+xml" title="{{ translate "site_name" }}" href="/opensearch.xml">
@ -152,6 +159,9 @@
<button name="t" value="file" class="clickable">{{ translate "torrents" }}</button>
</div>
</div>
<noscript>
<input type="hidden" name="js_enabled" value="true">
</noscript>
</form>
<form class="results_settings" action="/search" method="get">
<input type="hidden" name="q" value="{{ .Query }}">
@ -174,35 +184,47 @@
<!-- Images Grid -->
{{ range $index, $result := .Results }}
<div class="image">
{{ if $.HardCacheEnabled }}
<noscript>
<!-- JavaScript is disabled; serve actual images -->
<img src="{{ $result.ProxyFull }}" alt="{{ $result.Title }}" class="clickable" />
</noscript>
<!-- JavaScript is enabled; use placeholders -->
<img
src="/static/images/placeholder.svg"
data-id="{{ $result.ID }}"
alt="{{ .Title }}"
data-full="{{ .ProxyFull }}"
data-proxy-full="{{ .ProxyThumb }}"
class="clickable"
data-full="{{ $result.ProxyFull }}"
data-proxy-full="{{ $result.ProxyThumb }}"
alt="{{ $result.Title }}"
class="clickable placeholder-img"
/>
<div class="resolution">{{ .Width }} × {{ .Height }}</div>
{{ else }}
<!-- HardCacheEnabled is false; serve images directly -->
<img src="{{ $result.ProxyFull }}" alt="{{ $result.Title }}" class="clickable" />
{{ end }}
<div class="resolution">{{ $result.Width }} × {{ $result.Height }}</div>
<div class="details">
<span class="img_title clickable">{{ .Title }}</span>
<a href="{{ .Source }}" target="_blank" class="img_source">{{ translate "source" }}</a>
<span class="img_title clickable">{{ $result.Title }}</span>
<a href="{{ $result.Source }}" target="_blank" class="img_source">{{ translate "source" }}</a>
</div>
</div>
{{ end }}
</div>
<!-- Nav buttons -->
<noscript>
<div class="prev-next prev-img">
<form action="/search" method="get">
<input type="hidden" name="q" value="{{ .Query }}">
<input type="hidden" name="t" value="image">
<form action="/search" id="prev-next-form" class="results-search-container" method="GET" autocomplete="off">
<!-- Existing form fields -->
<input type="hidden" name="js_disabled" value="true">
</form>
<!-- Nav buttons -->
<div class="pagination">
{{ if .HasPrevPage }}
<button type="submit" name="p" value="{{ sub .Page 1 }}">{{ translate "previous" }}</button>
<a href="/search?q={{ .Query }}&t=image&p={{ sub .Page 1 }}">{{ translate "previous" }}</a>
{{ end }}
{{ if .HasNextPage }}
<button type="submit" name="p" value="{{ add .Page 1 }}">{{ translate "next" }}</button>
<a href="/search?q={{ .Query }}&t=image&p={{ add .Page 1 }}">{{ translate "next" }}</a>
{{ end }}
</form>
</div>
</noscript>
{{ else if .NoResults }}
@ -218,146 +240,185 @@
<div id="image-viewer-overlay" style="display: none;"></div>
<div id="template-data" data-page="{{ .Page }}" data-query="{{ .Query }}" data-type="image" data-hard-cache-enabled="{{ .HardCacheEnabled }}"></div>
<script defer src="/static/js/dynamicscrolling.js"></script>
<script defer src="/static/js/autocomplete.js"></script>
<script defer src="/static/js/imagetitletrim.js"></script>
<script defer src="/static/js/imageviewer.js"></script>
<!-- JavaScript to Load Images -->
<!-- JavaScript to Load Images and Dynamic loading of the page -->
<script>
document.addEventListener("DOMContentLoaded", function() {
const templateData = document.getElementById('template-data');
const hardCacheEnabled = templateData.getAttribute('data-hard-cache-enabled') === 'true';
(function() {
// Configuration
const imageStatusInterval = 500; // Interval in milliseconds to check image status
const scrollThreshold = 500; // Distance from bottom of the page to trigger loading
let isFetching = false;
let page = parseInt(document.getElementById('template-data').getAttribute('data-page')) || 1;
let query = document.getElementById('template-data').getAttribute('data-query');
let hardCacheEnabled = document.getElementById('template-data').getAttribute('data-hard-cache-enabled') === 'true';
let noMoreImages = false; // Flag to indicate if there are no more images to load
if (hardCacheEnabled) {
// Immediate loading of images
const images = document.querySelectorAll("img[data-id]");
images.forEach((img) => {
// Use the ProxyFull URL directly
img.src = img.dataset.proxyFull;
img.onload = function() {
img.classList.add('loaded');
let imageElements = [];
let imageIds = [];
/**
* Function to handle image load errors with retry logic
* @param {HTMLElement} imgElement - The image element that failed to load
* @param {number} retryCount - Number of retries left
* @param {number} retryDelay - Delay between retries in milliseconds
*/
function handleImageError(imgElement, retryCount = 3, retryDelay = 1000) {
if (retryCount > 0) {
setTimeout(() => {
imgElement.src = imgElement.getAttribute('data-full');
imgElement.onerror = function() {
handleImageError(imgElement, retryCount - 1, retryDelay);
};
img.onerror = function() {
console.error('Failed to load image:', img.dataset.proxyFull);
};
});
return;
}
let imageMap = {}; // Map of image IDs to img elements
let loadedImageIDs = new Set(); // Keep track of loaded image IDs
let pollingInterval = 2000; // Polling interval in milliseconds
function initializeImages() {
const images = document.querySelectorAll("img[data-id]");
images.forEach((img) => {
const id = img.dataset.id;
if (!imageMap[id]) {
imageMap[id] = img;
}
});
}
// Initialize with images present at page load
initializeImages();
// Set up MutationObserver to detect new images added to the DOM
const observer = new MutationObserver((mutationsList) => {
for (let mutation of mutationsList) {
if (mutation.type === 'childList') {
mutation.addedNodes.forEach((node) => {
if (node.nodeType === Node.ELEMENT_NODE) {
if (node.matches && node.matches('img[data-id]')) {
const img = node;
const id = img.dataset.id;
if (!imageMap[id]) {
imageMap[id] = img;
console.log('New image added:', id);
}
}, retryDelay);
} else {
// Check for nested images within added nodes
const nestedImages = node.querySelectorAll && node.querySelectorAll('img[data-id]');
if (nestedImages && nestedImages.length > 0) {
nestedImages.forEach((img) => {
const id = img.dataset.id;
if (!imageMap[id]) {
imageMap[id] = img;
console.log('New nested image added:', id);
}
});
// After retries, hide the image container or set a fallback image
console.warn('Image failed to load after retries:', imgElement.getAttribute('data-full'));
imgElement.parentElement.style.display = 'none'; // Hide the image container
// Alternatively, set a fallback image:
// imgElement.src = '/static/images/fallback.svg';
}
}
}
});
}
}
});
// Start observing the document body for added nodes
observer.observe(document.body, { childList: true, subtree: true });
/**
* Function to ensure the page is scrollable by loading more images if necessary
*/
function ensureScrollable() {
if (noMoreImages) return; // Do not attempt if no more images are available
// Check if the page is not scrollable
if (document.body.scrollHeight <= window.innerHeight) {
// If not scrollable, fetch the next page
fetchNextPage();
}
}
/**
* Function to fetch the next page of images
*/
function fetchNextPage() {
if (isFetching || noMoreImages) return;
isFetching = true;
page += 1;
fetch(`/search?q=${encodeURIComponent(query)}&t=image&p=${page}&ajax=true`)
.then(response => response.text())
.then(html => {
// Parse the returned HTML and extract image elements
let parser = new DOMParser();
let doc = parser.parseFromString(html, 'text/html');
let newImages = doc.querySelectorAll('.image');
if (newImages.length > 0) {
let resultsContainer = document.querySelector('.images');
newImages.forEach(imageDiv => {
// Append new images to the container
resultsContainer.appendChild(imageDiv);
// Get the img element
let img = imageDiv.querySelector('img');
if (img) {
if (hardCacheEnabled) {
// Replace image with placeholder
img.src = '/static/images/placeholder.svg';
img.onerror = function() {
handleImageError(img);
};
let id = img.getAttribute('data-id');
if (id) { // Only include if ID is not empty
imageElements.push(img);
imageIds.push(id);
}
}
}
});
if (hardCacheEnabled) {
checkImageStatus();
}
// After appending new images, ensure the page is scrollable
ensureScrollable();
} else {
// No more images to load
noMoreImages = true;
}
isFetching = false;
})
.catch(error => {
console.error('Error fetching next page:', error);
isFetching = false;
});
}
/**
* Function to check image status via AJAX
*/
function checkImageStatus() {
const imageIDs = Object.keys(imageMap).filter(id => !loadedImageIDs.has(id));
if (imageIDs.length === 0) {
console.log('All images loaded.');
if (!hardCacheEnabled) return;
if (imageIds.length === 0) {
// No images to check, do nothing
return;
}
console.log('Checking status for images:', imageIDs); // Debugging
fetch('/image_status?image_ids=' + imageIDs.join(','))
// Send AJAX request to check image status
fetch(`/image_status?image_ids=${imageIds.join(',')}`)
.then(response => response.json())
.then(statusMap => {
console.log('Status map:', statusMap); // Debugging
let imagesStillLoading = false;
for (const [id, url] of Object.entries(statusMap)) {
const img = imageMap[id];
if (url) {
// Append cache-busting query parameter
const cacheBustingUrl = url + '?t=' + new Date().getTime();
if (img.src !== cacheBustingUrl) {
img.src = cacheBustingUrl;
img.onload = function() {
// Image loaded successfully
img.classList.add('loaded');
loadedImageIDs.add(id);
};
imageElements = imageElements.filter(img => {
let id = img.getAttribute('data-id');
if (statusMap[id]) {
// Image is ready, update src
img.src = statusMap[id];
img.onerror = function() {
console.error('Failed to load image:', url);
handleImageError(img);
};
// Remove the image id from the list
imageIds = imageIds.filter(imageId => imageId !== id);
return false; // Remove img from imageElements
}
} else {
imagesStillLoading = true;
}
}
if (imagesStillLoading) {
// Poll again after a delay
setTimeout(checkImageStatus, pollingInterval);
} else {
polling = false;
console.log('All images loaded.');
}
return true; // Keep img in imageElements
});
// After updating images, ensure the page is scrollable
ensureScrollable();
})
.catch(error => {
console.error('Error checking image status:', error);
// Retry after a delay in case of error
setTimeout(checkImageStatus, pollingInterval * 2);
});
}
// Start polling every pollingInterval milliseconds
const pollingIntervalId = setInterval(checkImageStatus, pollingInterval);
// Initialize imageElements and imageIds
if (hardCacheEnabled) {
imageElements = Array.from(document.querySelectorAll('img[data-id]'));
imageIds = imageElements
.map(img => img.getAttribute('data-id'))
.filter(id => id); // Exclude empty IDs
// Optionally, call checkImageStatus immediately
checkImageStatus();
// Replace images with placeholders
imageElements.forEach(img => {
img.src = '/static/images/placeholder.svg';
});
</script>
<script>
// Check if JavaScript is enabled and modify the DOM accordingly
// Start checking image status
let imageStatusTimer = setInterval(checkImageStatus, imageStatusInterval);
checkImageStatus(); // Initial check
// After initial images are loaded, ensure the page is scrollable
window.addEventListener('load', ensureScrollable);
}
// Infinite scrolling
window.addEventListener('scroll', function() {
if (isFetching || noMoreImages) return;
if (window.innerHeight + window.scrollY >= document.body.offsetHeight - scrollThreshold) {
// User scrolled near the bottom
fetchNextPage();
}
});
// Remove 'js-enabled' class from content
document.getElementById('content').classList.remove('js-enabled');
})();
</script>
</body>
</html>

View file

@ -0,0 +1,28 @@
{{ range $index, $result := .Results }}
<div class="image">
{{ if $.HardCacheEnabled }}
<noscript>
<!-- JavaScript is disabled; serve actual images -->
<img src="{{ $result.ProxyFull }}" alt="{{ $result.Title }}" class="clickable" />
</noscript>
<!-- JavaScript is enabled; use placeholders -->
<img
src="/static/images/placeholder.svg"
data-id="{{ $result.ID }}"
data-full="{{ $result.ProxyFull }}"
data-proxy-full="{{ $result.ProxyThumb }}"
alt="{{ $result.Title }}"
class="clickable placeholder-img"
/>
{{ else }}
<!-- HardCacheEnabled is false; serve images directly -->
<img src="{{ $result.ProxyFull }}" alt="{{ $result.Title }}" class="clickable" />
{{ end }}
<div class="resolution">{{ $result.Width }} × {{ $result.Height }}</div>
<div class="details">
<span class="img_title clickable">{{ $result.Title }}</span>
<a href="{{ $result.Source }}" target="_blank" class="img_source">{{ translate "source" }}</a>
</div>
</div>
{{ end }}

View file

@ -7,6 +7,20 @@
<meta name="darkreader-lock">
{{ end }}
<title>{{ translate "site_description" }}</title>
<!-- Inline Style to Avoid Flashbang -->
<style>
body {
background-color: {{ if .IsThemeDark }} #121212 {{ else }} #ffffff {{ end }};
color: {{ if .IsThemeDark }} #ffffff {{ else }} #000000 {{ end }};
}
#js-enabled {
display: none;
}
#js-disabled {
display: block;
}
</style>
<link rel="stylesheet" href="/static/css/style-search.css">
<link rel="stylesheet" href="/static/css/{{.Theme}}.css">
<link rel="search" type="application/opensearchdescription+xml" title="{{ translate "site_name" }}" href="/opensearch.xml">
@ -17,9 +31,14 @@
<link rel="apple-touch-icon" href="{{ .IconPathPNG }}">
</head>
<body>
<!-- Menu Button -->
<button class="material-icons-round settings-icon-link-search" onclick="openNav()">menu</button>
<!-- Menu Button -->
<div id="js-enabled">
<button class="material-icons-round settings-icon-link-search" onclick="openNav()">menu</button>
</div>
<div id="js-disabled">
<a href="/settings" class="material-icons-round settings-icon-link-search">menu</a>
</div>
<!-- Side Navigation Menu -->
<div id="mySidenav" class="side-nav">
@ -140,36 +159,46 @@
</div>
</div>
<div class="search-type-icons">
<input type="hidden" name="p" value="1">
<div class="icon-button" onclick="document.getElementById('sub-search-wrapper-ico-text').click()">
<button id="sub-search-wrapper-ico-text" class="material-icons-round clickable" name="t" value="text">search</button>
<div class="icon-button">
<button id="sub-search-wrapper-ico-text" class="material-icons-round clickable" name="t" value="text">
<span>search</span>
<p>{{ translate "web" }}</p>
</button>
</div>
<div class="icon-button" onclick="document.getElementById('sub-search-wrapper-ico-image').click()">
<button id="sub-search-wrapper-ico-image" class="material-icons-round clickable" name="t" value="image">image</button>
<div class="icon-button">
<button id="sub-search-wrapper-ico-image" class="material-icons-round clickable" name="t" value="image">
<span>image</span>
<p>{{ translate "images" }}</p>
</button>
</div>
<div class="icon-button" onclick="document.getElementById('sub-search-wrapper-ico-video').click()">
<button id="sub-search-wrapper-ico-video" class="material-icons-round clickable" name="t" value="video">movie</button>
<div class="icon-button">
<button id="sub-search-wrapper-ico-video" class="material-icons-round clickable" name="t" value="video">
<span>movie</span>
<p>{{ translate "videos" }}</p>
</button>
</div>
<div class="icon-button" onclick="document.getElementById('sub-search-wrapper-ico-forum').click()">
<button id="sub-search-wrapper-ico-forum" class="material-icons-round clickable" name="t" value="forum">forum</button>
<div class="icon-button">
<button id="sub-search-wrapper-ico-forum" class="material-icons-round clickable" name="t" value="forum">
<span>forum</span>
<p>{{ translate "forums" }}</p>
</button>
</div>
<div class="icon-button" onclick="document.getElementById('sub-search-wrapper-ico-map').click()">
<button id="sub-search-wrapper-ico-map" class="material-icons-round clickable" name="t" value="map">map</button>
<div class="icon-button">
<button id="sub-search-wrapper-ico-map" class="material-icons-round clickable" name="t" value="map">
<span>map</span>
<p>{{ translate "maps" }}</p>
</button>
</div>
<div class="icon-button" onclick="document.getElementById('sub-search-wrapper-ico-file').click()">
<button id="sub-search-wrapper-ico-file" class="material-icons-round clickable" name="t" value="file">share</button>
<div class="icon-button">
<button id="sub-search-wrapper-ico-file" class="material-icons-round clickable" name="t" value="file">
<span>share</span>
<p>{{ translate "torrents" }}</p>
</button>
</div>
</div>
</div>
@ -180,9 +209,9 @@
<script defer src="/static/js/sidemenu.js"></script>
<script defer src="/static/js/autocomplete.js"></script>
<script>
window.addEventListener('load', function() {
document.body.style.visibility = 'visible';
});
// When JS is detected, update the DOM
document.getElementById('js-enabled').style.display = 'block';
document.getElementById('js-disabled').style.display = 'none';
</script>
</body>
</html>

View file

@ -9,7 +9,7 @@ import (
// Function to check for updates and restart the server if an update is found
func checkForUpdates() {
repoURL := "https://weforgecode.xyz/Spitfire/Search.git"
repoURL := "https://weforge.xyz/Spitfire/Search.git"
localDir := "." // Assume the repository is cloned in the current directory
for {