Просмотр исходного кода

Merge branch 'v2-develop' into v2-master

causefx 6 месяцев назад
Родитель
Сommit
66f546ef87

+ 39 - 4
api/classes/organizr.class.php

@@ -67,6 +67,8 @@ class Organizr
 	use uTorrentHomepageItem;
 	use UptimeKumaHomepageItem;
 	use JellyStatHomepageItem;
+	use PromPageHomepageItem;
+
 
 	// ===================================
 	// Organizr Version
@@ -94,6 +96,7 @@ class Organizr
 	public $paths;
 	public $checkForUpdates;
 	public $groupOptions;
+	public $userOptions;
 	public $warnings;
 	public $errors;
 	public bool $loggerSetup = false;
@@ -2460,6 +2463,8 @@ class Organizr
 				$this->settingsOption('switch', 'enableLocalAddressForward', ['label' => 'Enable Local Address Forward', 'help' => 'Enables the local address forward if on local address and accessed from WAN Domain']),
 				$this->settingsOption('switch', 'disableRecoverPass', ['label' => 'Disable Recover Password', 'help' => 'Disables recover password area']),
 				$this->settingsOption('input', 'customForgotPassText', ['label' => 'Custom Recover Password Text', 'help' => 'Text or HTML for recovery password section']),
+				$this->settingsOption('switch', 'bypassLoginForLocal', ['label' => 'Bypass Login For Local Access', 'help' => 'Disables login and logs user in with default User Id']),
+				$this->settingsOption('orguser', 'localLoginUserId', ['label' => 'Local User Id', 'help' => 'User Id to login the user when bypassing login']),
 			],
 			'Auth Proxy' => [
 				$this->settingsOption('switch', 'authProxyEnabled', ['label' => 'Auth Proxy', 'help' => 'Enable option to set Auth Proxy Header Login']),
@@ -3675,6 +3680,19 @@ class Organizr
 
 	public function login($array)
 	{
+		// Bypass Check
+		$bypassLogin = $this->config['bypassLoginForLocal'] && $this->config['localLoginUserId'] && $this->isLocal() == true;
+		if(gettype($array) == 'array'){
+			if(key_exists('bypass', $array)){
+				$bypassLogin = false;
+			}
+			if(key_exists('username', $array)){
+				$bypassLogin = false;
+			}
+			if(key_exists('oAuth', $array)){
+				$bypassLogin = false;
+			}
+		}
 		// Grab username, Password & other optional items from api call
 		$username = $array['username'] ?? null;
 		$password = $array['password'] ?? null;
@@ -3724,7 +3742,7 @@ class Organizr
 			}
 		}
 		// Check if Login method was an oAuth login
-		if (!$oAuth) {
+		if (!$oAuth && !$bypassLogin) {
 			$result = $this->getUserByUsernameAndEmail($username, $username);
 			$result['password'] = $result['password'] ?? '';
 			// Switch AuthType - internal - external - both
@@ -3750,6 +3768,10 @@ class Organizr
 					}
 			}
 			$authSuccess = ($authProxy) ? $addEmailToAuthProxy : $authSuccess;
+		} elseif ($bypassLogin){
+			$id = $this->config['localLoginUserId'];
+			$result = $this->getUserById($id);
+			$authSuccess = true;
 		} else {
 			// Has oAuth Token!
 			switch ($oAuthType) {
@@ -3796,7 +3818,7 @@ class Organizr
 			}
 			if ($userExists) {
 				//does org password need to be updated
-				if (!$passwordMatches) {
+				if (!$passwordMatches && $password) {
 					$this->updateUserPassword($password, $result['id']);
 					$this->setLoggerChannel('Authentication', $username);
 					$this->logger->info('User Password updated from backend');
@@ -4411,7 +4433,8 @@ class Organizr
 				'agent' => isset($_SERVER ['HTTP_USER_AGENT']) ? $_SERVER ['HTTP_USER_AGENT'] : null,
 				'oAuthLogin' => isset($_COOKIE['oAuth']),
 				'local' => $this->isLocal(),
-				'ip' => $this->userIP()
+				'ip' => $this->userIP(),
+				'bypass' => $this->config['bypassLoginForLocal'] && $this->config['localLoginUserId'] && $this->isLocal() == true
 			],
 			'login' => [
 				'rememberMe' => $this->config['rememberMe'],
@@ -4727,6 +4750,13 @@ class Organizr
 						$class .= ' faded';
 					}
 					break;
+				case 'homepageOrderPromPage':
+					$class = 'bg-info';
+					$image = 'plugins/images/tabs/prompage.png';
+					if (!$this->config['homepagePromPageEnabled']) {
+						$class .= ' faded';
+					}
+					break;
 				case 'homepageOrderWeatherAndAir':
 					$class = 'bg-success';
 					$image = 'plugins/images/tabs/wind.png';
@@ -4816,6 +4846,11 @@ class Organizr
 		$this->groupOptions = $this->groupSelect();
 	}
 
+	public function setUserOptionsVariable()
+	{
+		$this->userOptions = $this->userSelect();
+	}
+
 	public function getSettingsHomepageItem($item)
 	{
 		$items = $this->getSettingsHomepage();
@@ -5153,7 +5188,7 @@ class Organizr
 		];
 		return $this->processQueries($response);
 	}
-
+	
 	public function getNextCategoryId()
 	{
 		$response = [

+ 14 - 4
api/config/default.php

@@ -377,9 +377,10 @@ return [
 	'homepageOrderAdguard' => '42',
 	'homepageOrderProwlarr' => '43',
 	'homepageOrderUptimeKuma' => '44',
-	'homepageOrderEmbyLiveTVTracker' => '45',
-	'homepageOrderUserWatchStats' => '46',
-	'homepageOrderJellyStat' => '47',
+  'homepageOrderPromPage' => '45',
+	'homepageOrderEmbyLiveTVTracker' => '46',
+	'homepageOrderUserWatchStats' => '47',
+	'homepageOrderJellyStat' => '48',
 	'homepageEmbyLiveTVTrackerEnabled' => false,
 	'homepageEmbyLiveTVTrackerAuth' => '1',
 	'homepageEmbyLiveTVTrackerRefresh' => '5',
@@ -758,7 +759,16 @@ return [
 	'homepageUptimeKumaHeaderToggle' => true,
 	'homepageUptimeKumaCompact' => true,
 	'homepageUptimeKumaShowLatency' => true,
+	'homepagePromPageEnabled' => false,
+	'promPageURL' => '',
+	'homepagePromPageRefresh' => '60000',
+	'homepagePromPageHeader' => 'Status Page',
+	'homepagePromPageHeaderToggle' => true,
+	'homepagePromPageCompact' => true,
+	'homepagePromPageShowUptime' => true,
 	'checkForUpdate' => true,
 	'socksDebug' => false,
-	'maxSocksDebugSize' => 100
+	'maxSocksDebugSize' => 100,
+	'bypassLoginForLocal' => false,
+	'localLoginUserId' => "1"
 ];

+ 8 - 0
api/functions/option-functions.php

@@ -23,6 +23,14 @@ trait OptionsFunction
 			'value' => $this->config[$name] ?? ''
 		];
 		switch ($type) {
+			case 'orguser':
+				$this->setUserOptionsVariable();
+				$settingMerge = [
+					'type' => 'select',
+					'label' => 'Organizr User',
+					'options' => $this->userOptions
+				];
+				break;
 			case 'enable':
 				$settingMerge = [
 					'type' => 'switch',

+ 13 - 0
api/functions/organizr-functions.php

@@ -638,6 +638,19 @@ trait OrganizrFunctions
 		return $select;
 	}
 
+	public function userSelect()
+	{
+		$users = $this->getAllUsers();
+		$select = [];
+		foreach ($users as $key => $value) {
+			$select[] = array(
+				'name' => $value['username'],
+				'value' => $value['id']
+			);
+		}
+		return $select;
+	}
+
 	public function showLogin()
 	{
 		if ($this->config['hideRegistration'] == false) {

+ 117 - 0
api/homepage/prompage.php

@@ -0,0 +1,117 @@
+<?php
+
+use GuzzleHttp\Client;
+use GuzzleHttp\Exception\GuzzleException;
+
+trait PromPageHomepageItem
+{
+	private static Client $kumaClient;
+
+	public function promPageSettingsArray($infoOnly = false)
+	{
+		$homepageInformation = [
+			'name' => 'PromPage',
+			'enabled' => true,
+			'image' => 'plugins/images/tabs/prompage.png',
+			'category' => 'Monitor',
+			'settingsArray' => __FUNCTION__
+		];
+		if ($infoOnly) {
+			return $homepageInformation;
+		}
+		$homepageSettings = [
+			'debug' => true,
+			'settings' => [
+				'Enable' => [
+					$this->settingsOption('html', null, ['override' => 6, 'label' => 'Info', 'html' => '<p>This homepage item requires <a href="https://github.com/henrywhitaker3/prompage" target="_blank" rel="noreferrer noopener">PromPage <i class="fa fa-external-link" aria-hidden="true"></i></a> to be running.</p>']),
+					$this->settingsOption('enable', 'homepagePromPageEnabled'),
+				],
+				'Connection' => [
+					$this->settingsOption('url', 'promPageURL', ['help' => 'URL for Uptime Kuma e.g. http://kuma:3001 (no trailing slash)', 'placeholder' => 'http://prompage:3000']),
+				],
+				'Options' => [
+					$this->settingsOption('refresh', 'homepagePromPageRefresh'),
+					$this->settingsOption('title', 'homepagePromPageHeader'),
+					$this->settingsOption('toggle-title', 'homepagePromPageHeaderToggle'),
+					$this->settingsOption('switch', 'homepagePromPageCompact', ['label' => 'Compact view', 'help' => 'Toggles the compact view of this homepage module']),
+					$this->settingsOption('switch', 'homepagePromPageShowUptime', ['label' => 'Show monitor uptime']),
+				],
+			]
+		];
+		return array_merge($homepageInformation, $homepageSettings);
+	}
+
+	public function promPageHomepagePermissions($key = null)
+	{
+		$permissions = [
+			'main' => [
+				'enabled' => [
+					'homepagePromPageEnabled'
+				],
+				'not_empty' => [
+					'promPageURL',
+				]
+			]
+		];
+		return $this->homepageCheckKeyPermissions($key, $permissions);
+	}
+
+	public function homepageOrderPromPage()
+	{
+		if ($this->homepageItemPermissions($this->promPageHomepagePermissions('main'))) {
+			return '
+				<div id="' . __FUNCTION__ . '">
+					<div class="white-box homepage-loading-box"><h2 class="text-center" lang="en">Loading Status Page...</h2></div>
+					<script>
+						// PromPage
+						homepagePromPage("' . $this->config['homepagePromPageRefresh'] . '");
+						// End PromPage
+					</script>
+				</div>
+				';
+		}
+	}
+
+	public function getpromPageHomepageData()
+	{
+		if (!$this->homepageItemPermissions($this->promPageHomepagePermissions('main'), true)) {
+			return false;
+		}
+		$api = [];
+		$url = $this->qualifyURL($this->config['promPageURL']);
+		try {
+			$services = json_decode($this->getPromPageClient($url, $this->config['promPageToken'])
+					->get('/api/services')
+					->getBody()
+					->getContents())->services;
+
+			$api = [
+				'data' => $services,
+				'options' => [
+					'title' => $this->config['homepagePromPageHeader'],
+					'titleToggle' => $this->config['homepagePromPageHeaderToggle'],
+					'compact' => $this->config['homepagePromPageCompact'],
+					'showUptime' => $this->config['homepagePromPageShowUptime'],
+				]
+			];
+		} catch (GuzzleException $e) {
+			$this->setLoggerChannel('promPage')->error($e);
+			$this->setAPIResponse('error', $e->getMessage(), 401);
+			return false;
+		};
+		$api = isset($api) ? $api : false;
+		$this->setAPIResponse('success', null, 200, $api);
+		return $api;
+	}
+
+	private function getPromPageClient(string $url): Client
+	{
+		if (!isset(static::$kumaClient)) {
+			static::$kumaClient = new Client([
+				'base_uri' => $url,
+			]);
+		}
+
+		return static::$kumaClient;
+	}
+}

+ 4 - 2
api/homepage/radarr.php

@@ -292,7 +292,9 @@ trait RadarrHomepageItem
 				$banner = "/plugins/images/homepage/no-np.png";
 				foreach ($child['images'] as $image) {
 					if ($image['coverType'] == "banner" || $image['coverType'] == "fanart") {
-						if (strpos($image['url'], '://') === false) {
+						if ($image['coverType'] == 'fanart' && (isset($image['remoteUrl']) && $image['remoteUrl'] !== '')) {
+							$banner = $image['remoteUrl'];
+						}elseif (strpos($image['url'], '://') === false) {
 							$imageUrl = $image['url'];
 							$urlParts = explode("/", $url);
 							$imageParts = explode("/", $image['url']);
@@ -306,7 +308,7 @@ trait RadarrHomepageItem
 						}
 					}
 				}
-				if ($banner !== "/plugins/images/homepage/no-np.png" || (strpos($banner, 'apikey') !== false)) {
+				if ($banner !== "/plugins/images/homepage/no-np.png" && (strpos($banner, 'apikey') !== false)) {
 					$cacheDirectory = dirname(__DIR__, 2) . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR;
 					$imageURL = $banner;
 					$cacheFile = $cacheDirectory . $movieID . '.jpg';

+ 3 - 0
api/homepage/sonarr.php

@@ -282,6 +282,9 @@ trait SonarrHomepageItem
 				if ($image['coverType'] == "fanart" && (isset($image['url']) && $image['url'] !== '')) {
 					$fanArt = $image['url'];
 				}
+				if ($image['coverType'] == 'fanart' && (isset($image['remoteUrl']) && $image['remoteUrl'] !== '')) {
+					$fanArt = $image['remoteUrl'];
+				}
 			}
 			if ($fanArt !== "/plugins/images/homepage/no-np.png" || (strpos($fanArt, '://') === false)) {
 				$cacheDirectory = dirname(__DIR__, 2) . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR;

+ 2 - 2
api/plugins/chat/plugin.php

@@ -36,7 +36,7 @@ class Chat extends Organizr
 										<li><i class="fa fa-chevron-right text-danger"></i> <a href="https://dashboard.pusher.com/accounts/sign_up" target="_blank"><span lang="en">Signup for Pusher [FREE]</span></a></li>
 										<li><i class="fa fa-chevron-right text-danger"></i> <span lang="en">Create an App called whatever you like and choose a cluster (Close to you)</span></li>
 										<li><i class="fa fa-chevron-right text-danger"></i> <span lang="en">Frontend (JQuery) - Backend (PHP)</span></li>
-										<li><i class="fa fa-chevron-right text-danger"></i> <span lang="en">Click the overview tab on top left</span></li>
+										<li><i class="fa fa-chevron-right text-danger"></i> <span lang="en">Click the App Keys tab on top left</span></li>
 										<li><i class="fa fa-chevron-right text-danger"></i> <span lang="en">Copy and paste the 4 values into Organizr</span></li>
 										<li><i class="fa fa-chevron-right text-danger"></i> <span lang="en">Save and reload!</span></li>
 									</ul>
@@ -176,4 +176,4 @@ class Chat extends Organizr
 		];
 		return $this->processQueries($response);
 	}
-}
+}

+ 8 - 0
api/v2/routes/homepage.php

@@ -316,6 +316,14 @@ $app->get('/homepage/kuma/data', function ($request, $response, $args) {
 		->withHeader('Content-Type', 'application/json;charset=UTF-8')
 		->withStatus($GLOBALS['responseCode']);
 });
+$app->get('/homepage/prompage/data', function ($request, $response, $args) {
+	$Organizr = ($request->getAttribute('Organizr')) ?? new Organizr();
+	$Organizr->getpromPageHomepageData();
+	$response->getBody()->write(jsonE($GLOBALS['api']));
+	return $response
+		->withHeader('Content-Type', 'application/json;charset=UTF-8')
+		->withStatus($GLOBALS['responseCode']);
+});
 $app->get('/homepage/speedtest/data', function ($request, $response, $args) {
 	$Organizr = ($request->getAttribute('Organizr')) ?? new Organizr();
 	$Organizr->getSpeedtestHomepageData();

+ 139 - 3
js/functions.js

@@ -8026,6 +8026,7 @@ function buildPiholeItem(array){
                     value = e['domains_being_blocked'].map(function (x) {
                         return `<li>${x.toString()}</li>`;
                     }).join("");
+		        }
                 card += `<ul class="multi-column" data-toggle="tooltip" title="` + key + `">` + value + `</ul>`;
 	        }
         }
@@ -9250,6 +9251,121 @@ function homepageUptimeKuma(timeout){
     timeouts[timeoutTitle] = setTimeout(function(){ homepageUptimeKuma(timeout); }, timeout);
     delete timeout;
 }
+function buildPromPageItem(array) {
+    var cards = '';
+    var options = array['options'];
+    var services = array['data'];
+    var tabName = '';
+    console.log(options)
+
+    var buildCard = function(name, data) {
+        if(data.status == true) {
+            var statusColor = 'success'; var imageText = 'fa fa-check-circle text-success'
+        } else {
+            var statusColor = 'danger animated-3 loop-animation flash'; var imageText = 'fa fa-times-circle text-danger'
+        }
+        tabName = data.name;
+        if(options['compact']) {
+            var card = `
+            <div class="col-xl-2 col-lg-3 col-md-4 col-sm-6 col-xs-12">
+                <div class="card bg-inverse text-white mb-3 monitorr-card">
+                    <div class="card-body bg-org-alt pt-1 pb-1">
+                        <div class="d-flex no-block align-items-center">
+                            <div class="left-health bg-`+statusColor+`"></div>
+                            <div class="ml-1 w-100">
+                                <i class="`+imageText+` font-20 pull-right mt-3 mb-2"></i>
+                                `;
+                                card += `<h3 class="d-flex no-block align-items-center mt-2 mb-2"><img class="lazyload loginTitle">&nbsp;`+data.name;
+                                if (data.uptime != null && options.showUptime) {
+                                    card += `<span class="ml-3 font-12 align-self-center text-dark">`+ Math.round(data.uptime * 100) / 100 +`%</span></h3>`
+                                }
+                                card += `</h3>`
+                                card += `<div class="clearfix"></div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>`;
+        } else {
+            var card = `
+            <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
+                <div class="card bg-inverse text-white mb-3 monitorr-card">
+                    <div class="card-body bg-org-alt text-center">
+                        `;
+                        card += `<div class="d-block">
+                            <h3 class="mt-0 mb-2">`+data.name+`</h3>`
+                            
+                        if (data.uptime != null && options.showUptime) {
+                            card += `<p class="text-dark mb-0">`+ Math.round(data.uptime * 100) / 100 +`%</p>`
+                        }
+
+                        card += `</div>
+                        <div class="d-inline-block mt-4 py-2 px-4 badge indicator bg-`+statusColor+`">
+                            <p class="mb-0">`; if(data.status == true) { card += 'UP' } else { card += 'DOWN' } card+=`</p>
+                        </div>
+                        `;
+                        card += `</div>
+                </div>
+            </div>
+            `;
+        }
+        return card;
+    }
+    for(var key in services) {
+        cards += buildCard(key, services[key]);
+    };
+    return cards;
+}
+function buildPromPage(array) {
+    if(array === false){ return ''; }
+    if(array.error != undefined) {
+	    organizrConsole('PromPage Function',array.error, 'error');
+    } else {
+        var html = `
+        <div id="allPromPage">
+            <div class="el-element-overlay row">`
+        if(array['options']['titleToggle']) {
+            html += `
+                <div class="col-md-12">
+                    <h4 class="pull-left homepage-element-title"><span lang="en">`+array['options']['title']+`</span> : </h4>
+                    <hr class="hidden-xs ml-2">
+                </div>
+                <div class="clearfix"></div>
+            `;
+        }
+        html += `
+                <div class="promPageCards">
+                    `+buildPromPageItem(array)+`
+                </div>
+            </div>
+        </div>
+        <div class="clearfix"></div>
+        `;
+    }
+    return (array) ? html : '';
+}
+function homepagePromPage(timeout){
+    var timeout = (typeof timeout !== 'undefined') ? timeout : activeInfo.settings.homepage.refresh.homepagePromPageRefresh;
+    organizrAPI2('GET','api/v2/homepage/prompage/data').success(function(data) {
+        try {
+            let response = data.response;
+	        document.getElementById('homepageOrderPromPage').innerHTML = '';
+	        if(response.data !== null){
+		        buildUptimeKuma(response.data)
+		        $('#homepageOrderPromPage').html(buildPromPage(response.data));
+	        }
+        }catch(e) {
+            console.log(e)
+	        organizrCatchError(e,data);
+        }
+    }).fail(function(xhr) {
+	    OrganizrApiError(xhr);
+    });
+    let timeoutTitle = 'PromPage-Homepage';
+    if(typeof timeouts[timeoutTitle] !== 'undefined'){ clearTimeout(timeouts[timeoutTitle]); }
+    timeouts[timeoutTitle] = setTimeout(function(){ homepagePromPage(timeout); }, timeout);
+    delete timeout;
+}
 function homepageSpeedtest(timeout){
     var timeout = (typeof timeout !== 'undefined') ? timeout : activeInfo.settings.homepage.refresh.homepageSpeedtestRefresh;
     organizrAPI2('GET','api/v2/homepage/speedtest/data').success(function(data) {
@@ -12001,7 +12117,19 @@ function showPlexMachineForm(selector = null){
 		})
 	);
 }
-function oAuthLoginNeededCheck() {
+function bypassLocalLogin() {
+
+	if(activeInfo.settings.user.bypass !== true){
+		return false;
+	}
+	const bypass = $.urlParam('bypassDisable');
+	if(bypass){
+		return false;
+	}
+	OAuthLoginNeeded = true;
+	oAuthLoginNeededCheck('Bypass');
+}
+function oAuthLoginNeededCheck(type = "OAuth") {
     if(OAuthLoginNeeded == false){
         return false;
     }else{
@@ -12009,8 +12137,15 @@ function oAuthLoginNeededCheck() {
             return false;
         }
     }
-    message('OAuth', ' Proceeding to login', activeInfo.settings.notifications.position, '#FFF', 'info', '10000');
-    organizrAPI2('POST', 'api/v2/login', '').success(function (data) {
+	let data = '';
+	if(type === 'Bypass'){
+		const bypass = $.urlParam('bypassDisable');
+		if(bypass){
+			data = 'bypass';
+		}
+	}
+    message(type, ' Proceeding to login', activeInfo.settings.notifications.position, '#FFF', 'info', '10000');
+    organizrAPI2('POST', 'api/v2/login', data).success(function (data) {
 	    local('set','message','Welcome|Login Successful|success');
 	    local('r','loggingIn');
 	    location.reload();
@@ -12579,6 +12714,7 @@ function launch(){
 	        }
 	        console.info("%c Organizr %c ".concat("DOM Fully loaded", " "), "color: white; background: #AD80FD; font-weight: 700;", "color: #AD80FD; background: white; font-weight: 700;");
 	        oAuthLoginNeededCheck();
+			bypassLocalLogin();
         } catch (e) {
             orgErrorCode(data);
             defineNotification();

+ 511 - 302
js/langpack/ko[Korean].json

@@ -16,7 +16,7 @@
         "Email": "이메일",
         "Enter your Email and instructions will be sent to you!": "이메일을 입력하시면 지침이 전송됩니다!",
         "Register": "등록",
-        "Registration Password": "암호 등록",
+        "Registration Password": "등록 암호",
         "Recover Password": "암호 복구",
         "Password": "암호",
         "Sign Up": "가입",
@@ -27,7 +27,7 @@
         "Installed": "설치됨",
         "Install Update": "업데이트 설치",
         "Organizr Versions": "Organizr 버전",
-        "About": "Organizr에 대하여",
+        "About": "관련 정보",
         "Organizr Logs": "Organizr 로그",
         "Main Settings": "메인 설정",
         "Updates": "업데이트",
@@ -51,9 +51,9 @@
         "Organizr Log": "Organizr 로그",
         "FIXED": "고침",
         "NEW": "신규",
-        "NOTE": "유의",
+        "NOTE": "참고",
         "Update Available": "업데이트 있음",
-        "is available, goto": "가 있습니다. 바로 가기:",
+        "is available, goto": "이() 있습니다. 바로 가기:",
         "Update Tab": "업데이트",
         "Database Name:": "데이터베이스 이름:",
         "Database Name": "데이터베이스 이름",
@@ -62,7 +62,7 @@
         "Hover to show": "마우스를 올려 표시",
         "API Key:": "API 키:",
         "API Key": "API 키",
-        "Registration Password:": "암호 등록:",
+        "Registration Password:": "등록 암호:",
         "Hash Key:": "해시 키:",
         "Hash Key": "해시 키",
         "Password:": "암호:",
@@ -70,8 +70,8 @@
         "The Hash Key will be used to decrypt all passwords etc... on the server.": "해시 키는 서버의 모든 암호 등을 해독하는 데 사용됩니다.",
         "The API Key will be used for all calls to organizr for the UI. [Auto-Generated]": "API 키는 UI용 Organizr에 대한 모든 호출에 사용됩니다. [자동 생성됨]",
         "Notice": "공지",
-        "Business": "비지니스",
-        "Personal": "프로패셔널",
+        "Business": "기업용",
+        "Personal": "개인용",
         "Choose License": "라이선스 선택",
         "Install Type": "설치 유형",
         "Verify": "검증",
@@ -98,11 +98,12 @@
         "Information": "정보",
         "Below you will find all the links for everything that has to do with Organizr": "아래에서 Organizr와 관련된 모든 것에 대한 모든 링크를 찾을 수 있습니다.",
         "Loading...": "로드 중...",
+        "Loading": "로드 중",
         "Donate": "기부",
         "Edit Group": "그룹 편집",
         "For icons, use the following format:": "아이콘의 경우 다음 형식을 사용합니다:",
         "For images, use the following format:": "이미지의 경우 다음 형식을 사용합니다:",
-        "You may use an image or icon in this field": "You may use an image or icon in this field",
+        "You may use an image or icon in this field": "이 필드에는 이미지나 아이콘을 사용할 수 있습니다",
         "Image Legend": "이미지 범례",
         "Category Image": "카테고리 이미지",
         "Category Name": "카테고리 이름",
@@ -121,7 +122,7 @@
         "Edit Tab": "탭 편집",
         "Add Tab": "탭 추가",
         "Add New Tab": "신규 탭 추가",
-        "SPLASH": "스래시",
+        "SPLASH": "스래시",
         "ACTIVE": "활성화",
         "TYPE": "유형",
         "GROUP": "그룹",
@@ -181,8 +182,8 @@
         "Inactive Plugins": "플러그인 비활성화",
         "Active Plugins": "플러그인 활성화",
         "Inactive": "비활성화",
-        "Everything Active": "모든 활성화",
-        "Nothing Active": "활성화되지 않음",
+        "Everything Active": "모두 활성화되어 있음",
+        "Nothing Active": "활성화된 플러그인 없음",
         "Choose Plex Machine": "Plex 머신 선택",
         "Test Speed to Server": "서버에 속도 테스트하기",
         "Test Server Speed": "서버 속도 테스트",
@@ -239,14 +240,15 @@
         "Loading Now Playing...": "지금 재생 로드 중...",
         "Loading Playlists...": "재생 목록 로드 중...",
         "Loading Download Queue...": "다운로드 대기열 로드 중...",
+        "Loading Bookmarks...": "북마크 로드 중...",
         "Organizr Mod Picks": "Organizr 모드 추천",
         "Requests": "요청",
-        "Become Sponsor": "후원자가 되세요",
+        "Become Sponsor": "스폰서가 되세요",
         "Splash Page": "스플래시 페이지",
         "Lock Screen": "화면 잠금",
-        "If you signed in with a Emby Acct... Please use the following link to change your password there:": "If you signed in with a Emby Acct... Please use the following link to change your password there:",
+        "If you signed in with a Emby Acct... Please use the following link to change your password there:": "Emby 계정으로 로그인한 경우... 다음 링크를 사용하여 암호를 변경하세요:",
         "Password Notice": "암호 공지",
-        "If you signed in with a Plex Acct... Please use the following link to change your password there:": "If you signed in with a Plex Acct... Please use the following link to change your password there:",
+        "If you signed in with a Plex Acct... Please use the following link to change your password there:": "Plex 계정으로 로그인하신 경우... 아래 링크를 사용하여 암호를 변경하세요:",
         "Active Tokens": "활성 토큰",
         "Deactivate": "비활성화",
         "Activate": "활성화",
@@ -259,18 +261,18 @@
         "Chat": "채팅",
         "Current Directory: ": "현재 디렉토리: ",
         "Suggested Directory: ": "추천 디렉토리: ",
-        "The Registration Password will lockout the registration field with this password. {User-Generated]": "The Registration Password will lockout the registration field with this password. {User-Generated]",
-        "The Hash Key will be used to decrypt all passwords etc... on the server. {User-Generated]": "The Hash Key will be used to decrypt all passwords etc... on the server. {User-Generated]",
-        "If using Plex or Emby - It is suggested that you use the username and email of the Admin account.": "If using Plex or Emby - It is suggested that you use the username and email of the Admin account.",
-        "Business has Media items hidden [Plex, Emby etc...]": "Business has Media items hidden [Plex, Emby etc...]",
-        "Personal has everything unlocked - no restrictions": "Personal has everything unlocked - no restrictions",
+        "The Registration Password will lockout the registration field with this password. {User-Generated]": "등록 암호는 이 암호로 등록 필드를 잠급니다. {사용자 생성됨]",
+        "The Hash Key will be used to decrypt all passwords etc... on the server. {User-Generated]": "해시 키는 서버의 모든 암호 등을 해독하는 데 사용됩니다. {사용자 생성됨]",
+        "If using Plex or Emby - It is suggested that you use the username and email of the Admin account.": "Plex 혹은 Emby를 사용하는 경우 - 관리자 계정의 사용자 이름과 이메일을 사용하는 것이 좋습니다.",
+        "Business has Media items hidden [Plex, Emby etc...]": "기업용은 미디어 항목이 숨겨집니다 [Plex, Emby 등...]",
+        "Personal has everything unlocked - no restrictions": "개인용은 모든 것이 잠금 해제되어 있습니다 - 제한이 없습니다",
         "Continue To Website": "웹사이트로 계속",
         "Patreon": "Patreon",
         "Cryptos": "Cryptos",
         "Square Cash": "Square Cash",
         "PayPal": "PayPal",
         "Beerpay.io": "Beerpay.io",
-        "Sponsors": "후원자",
+        "Sponsors": "스폰서",
         "THEME": "테마",
         "Theme Marketplace": "테마 스토어",
         "Test Tab": "탭 테스트",
@@ -278,7 +280,7 @@
         "Choose Icon": "아이콘 선택",
         "Choose Image": "이미지 선택",
         "Ping URL": "URL 핑",
-        "Please set tab as [New Window] on next screen": "다음 화면에서 탭을 [새 창]으로 설정해주세요",
+        "Please set tab as [New Window] on next screen": "다음 화면에서 탭을 [새 창(New Window)]으로 설정해주세요",
         "Tab can be set as iFrame": "탭을 iFrame으로 설정할 수 있습니다",
         "Premier": "프리미어",
         "Missing": "누락",
@@ -290,8 +292,8 @@
         "Choose Media Type": "미디어 유형 선택",
         "PHP Version Check": "PHP 버전 확인",
         "Don\\'t have an account?": "계정이 없습니까?",
-        "The value of #987654 is just a placeholder, you can change to any value you like.": "The value of #987654 is just a placeholder, you can change to any value you like.",
-        "This is not the same as database authentication - i.e. Plex Authentication | Emby Authentication | FTP Authentication": "This is not the same as database authentication - i.e. Plex Authentication | Emby Authentication | FTP Authentication",
+        "The value of #987654 is just a placeholder, you can change to any value you like.": "#987654의 값은 자리 표시자일 뿐이므로 원하는 값으로 변경할 수 있습니다.",
+        "This is not the same as database authentication - i.e. Plex Authentication | Emby Authentication | FTP Authentication": "이는 데이터베이스 인증과 동일하지 않습니다 - 예: Plex 인증 | Emby 인증 | FTP 인증",
         "Status: [ ": "상태: [ ",
         "This module requires XMLRPC": "이 모듈에는 XMLRPC가 필요합니다",
         "Misc Options": "기타 옵션",
@@ -313,18 +315,18 @@
         "Start": "시작",
         "Everyone Refresh Seconds": "모든 사용자 새로 고침 시간(초)",
         "Admin Refresh Seconds": "관리자 새로 고침 시간(초)",
-        "Minimum Authentication for Time Display": "Minimum Authentication for Time Display",
+        "Minimum Authentication for Time Display": "시간 표시를 위한 최소 인증",
         "Show Ping Time": "핑 시간 보여주기",
         "Offline Sound": "오프라인 소리",
         "Online Sound": "온라인 소리",
-        "Minimum Authentication for Message and Sound": "Minimum Authentication for Message and Sound",
+        "Minimum Authentication for Message and Sound": "메시지 및 소리에 대한 최소 인증",
         "Minimum Authentication": "최소 인증",
         "Nginx Auth Debug": "Nginx 인증 디버그",
         "Hide Registration": "등록 숨기기",
-        "Lockout Groups To": "Lockout Groups To",
-        "Lockout Groups From": "Lockout Groups From",
-        "Inactivity Lock": "Inactivity Lock",
-        "Inactivity Timer [Minutes]": "Inactivity Timer [Minutes]",
+        "Lockout Groups To": "잠금 그룹 대상",
+        "Lockout Groups From": "잠금 그룹 위치",
+        "Inactivity Lock": "비활동 잠금",
+        "Inactivity Timer [Minutes]": "비활동 시간 [분]",
         "Emby Token": "Emby 토큰",
         "http(s)://hostname:port": "http(s)://hostname:port",
         "Emby URL": "Emby URL",
@@ -351,10 +353,10 @@
         "Plex Note": "Plex 참고",
         "Admin username for Plex": "Plex 관리자 사용자 이름",
         "Admin Username": "관리자 사용자 이름",
-        "Click Main on the sub-menu above.": "Click Main on the sub-menu above.",
-        "Important Information": "Important Information",
-        "PING": "PING",
-        "Custom HTML/JavaScript": "Custom HTML/JavaScript",
+        "Click Main on the sub-menu above.": "인증을 사용자 지정하려면 위의 하위 메뉴에서 메인을 클릭하세요.",
+        "Important Information": "중요한 정보",
+        "PING": "",
+        "Custom HTML/JavaScript": "사용자 지정 HTML/JavaScript",
         "CustomHTML-2": "CustomHTML-2",
         "CustomHTML-1": "CustomHTML-1",
         "Refresh Seconds": "새로 고침 시간(초)",
@@ -363,10 +365,10 @@
         "Token": "토큰",
         "URL": "URL",
         "Ombi": "Ombi",
-        "Items Per Day": "Items Per Day",
-        "Time Format": "Time Format",
-        "Default View": "Default View",
-        "Start Day": "Start Day",
+        "Items Per Day": "일일 항목",
+        "Time Format": "시간 형식",
+        "Default View": "기본 보기",
+        "Start Day": "시작일",
         "SickRage": "SickRage",
         "CouchPotato": "CouchPotato",
         "Test Connection": "연결 테스트",
@@ -377,11 +379,11 @@
         "Lidarr": "Lidarr",
         "Show Unmonitored": "모니터링되지 않은 항목 보여주기",
         "Sonarr": "Sonarr",
-        "Hide Completed": "Hide Completed",
-        "Hide Seeding": "Hide Seeding",
+        "Hide Completed": "완료된 항목 숨기기",
+        "Hide Seeding": "시딩 중인 항목 숨기기",
         "Deluge": "Deluge",
-        "Order": "Order",
-        "Status: [": "Status: [",
+        "Order": "순서",
+        "Status: [": "상태: [",
         "]": "]",
         "rTorrent": "rTorrent",
         "Reverse Sorting": "Reverse Sorting",
@@ -389,238 +391,238 @@
         "Transmission": "Transmission",
         "NZBGet": "NZBGet",
         "SabNZBD": "SabNZBD",
-        "Image Cache Size": "Image Cache Size",
-        "Emby Tab WAN URL": "Emby Tab WAN URL",
-        "Only use if you have Emby in a reverse proxy": "Only use if you have Emby in a reverse proxy",
-        "Emby Tab Name": "Emby Tab Name",
-        "Item Limit": "Item Limit",
-        "Minimum Authorization": "Minimum Authorization",
-        "User Information": "User Information",
+        "Image Cache Size": "이미지 캐시 크기",
+        "Emby Tab WAN URL": "Emby  WAN URL",
+        "Only use if you have Emby in a reverse proxy": "역방향 프록시에 Emby가 있는 경우에만 사용하세요",
+        "Emby Tab Name": "Emby 탭 이름",
+        "Item Limit": "항목 제한",
+        "Minimum Authorization": "최소 인증",
+        "User Information": "사용자 정보",
         "Emby": "Emby",
-        "Plex Tab WAN URL": "Plex Tab WAN URL",
-        "Only use if you have Plex in a reverse proxy": "Only use if you have Plex in a reverse proxy",
-        "Plex Tab Name": "Plex Tab Name",
-        "Media Server": "Media Server",
+        "Plex Tab WAN URL": "Plex  WAN URL",
+        "Only use if you have Plex in a reverse proxy": "역방향 프록시에 Plex가 있는 경우에만 사용하세요",
+        "Plex Tab Name": "Plex 탭 이름",
+        "Media Server": "미디어 서버",
         "Plex": "Plex",
-        "separate by comma's": "separate by comma's",
-        "iCal URL's": "iCal URL's",
-        "Enable iCal": "Enable iCal",
-        "Calendar": "Calendar",
-        "Theme Javascript": "Theme Javascript",
-        "Custom Javascript": "Custom Javascript",
-        "Theme CSS [Can replace colors from above]": "Theme CSS [Can replace colors from above]",
-        "Custom CSS [Can replace colors from above]": "Custom CSS [Can replace colors from above]",
-        "Copy code and paste inside left box": "Copy code and paste inside left box",
-        "Download and unzip file and place in": "Download and unzip file and place in",
-        "Click [Generate your Favicons and HTML code]": "Click [Generate your Favicons and HTML code]",
-        "Enter this path": "Enter this path",
-        "At bottom of page on [Favicon Generator Options] under [Path] choose [I cannot or I do not want to place favicon files at the root of my web site.]": "At bottom of page on [Favicon Generator Options] under [Path] choose [I cannot or I do not want to place favicon files at the root of my web site.]",
-        "Edit settings to your liking": "Edit settings to your liking",
-        "Choose your image to use": "Choose your image to use",
-        "Click [Select your Favicon picture]": "Click [Select your Favicon picture]",
-        "Instructions": "Instructions",
-        "Fav Icon Code": "Fav Icon Code",
-        "Test Message": "Test Message",
-        "Position": "Position",
-        "Style": "Style",
-        "Theme": "Theme",
-        "Button Text Color": "Button Text Color",
-        "Button Color": "Button Color",
-        "Accent Text Color": "Accent Text Color",
-        "Accent Color": "Accent Color",
-        "Side Bar Text Color": "Side Bar Text Color",
-        "Side Bar Color": "Side Bar Color",
-        "Nav Bar Text Color": "Nav Bar Text Color",
-        "Nav Bar Color": "Nav Bar Color",
-        "Unsorted Tab Placement": "Unsorted Tab Placement",
-        "Alternate Homepage Titles": "Alternate Homepage Titles",
-        "Minimal Login Screen": "Minimal Login Screen",
-        "Login Wallpaper": "Login Wallpaper",
-        "Use Logo instead of Title": "Use Logo instead of Title",
-        "Title": "Title",
-        "Logo": "Logo",
-        "Import Users": "Import Users",
-        "Drop files here to upload": "Drop files here to upload",
-        "SpeedTest Settings": "SpeedTest Settings",
-        "PHP Mailer Settings": "PHP Mailer Settings",
-        "Invites Settings": "Invites Settings",
-        "Chat Settings": "Chat Settings",
-        "Delete ": "Delete ",
-        "App Cluster": "App Cluster",
+        "separate by comma's": "쉼표로 구분",
+        "iCal URL's": "iCal URL",
+        "Enable iCal": "iCal 활성화",
+        "Calendar": "캘린더",
+        "Theme Javascript": "테마 자바스크립트",
+        "Custom Javascript": "사용자 지정 자바스크립트",
+        "Theme CSS [Can replace colors from above]": "테마 CSS [위에서 색상 교체 가능]",
+        "Custom CSS [Can replace colors from above]": "사용자 지정 CSS [위에서 색상 교체 가능]",
+        "Copy code and paste inside left box": "코드를 복사하여 왼쪽 상자 안에 붙여넣으세요",
+        "Download and unzip file and place in": "파일을 다운로드하고 압축을 풀고 다음 위치에 넣으세요:",
+        "Click [Generate your Favicons and HTML code]": "[파비콘 및 HTML 코드 생성(Select your Favicon picture)]을 클릭하세요",
+        "Enter this path": "다음 경로로 이동하세요:",
+        "At bottom of page on [Favicon Generator Options] under [Path] choose [I cannot or I do not want to place favicon files at the root of my web site.]": "페이지 하단의 [경로(Path)] 아래 [파비콘 생성기 옵션(Favicon Generator Options)]에서 [파비콘 파일을 내 웹 사이트 루트에 넣을 수 없거나 넣고 싶지 않습니다.(I cannot or I do not want to place favicon files at the root of my web site.)]을 선택하세요.",
+        "Edit settings to your liking": "원하는 대로 설정을 편집하세요",
+        "Choose your image to use": "사용할 이미지를 선택하세요",
+        "Click [Select your Favicon picture]": "[파비콘 사진 선택(Select your Favicon picture)]을 클릭하세요",
+        "Instructions": "지침",
+        "Fav Icon Code": "파비콘 코드",
+        "Test Message": "메시지 테스트",
+        "Position": "위치",
+        "Style": "스타일",
+        "Theme": "테마",
+        "Button Text Color": "버튼 텍스트 색상",
+        "Button Color": "버튼 색상",
+        "Accent Text Color": "강조 텍스트 색상",
+        "Accent Color": "강조 색상",
+        "Side Bar Text Color": "사이드 바 텍스트 색상",
+        "Side Bar Color": "사이드 바 색상",
+        "Nav Bar Text Color": "내비 바 텍스트 색상",
+        "Nav Bar Color": "내비 바 색상",
+        "Unsorted Tab Placement": "정렬 안 된 탭 배치",
+        "Alternate Homepage Titles": "대체 홈페이지 제목",
+        "Minimal Login Screen": "최소 로그인 화면",
+        "Login Wallpaper": "로그인 배경 화면",
+        "Use Logo instead of Title": "제목 대신 로고 사용",
+        "Title": "제목",
+        "Logo": "로고",
+        "Import Users": "사용자 가져오기",
+        "Drop files here to upload": "업로드할 파일을 여기에 드롭하세요",
+        "SpeedTest Settings": "SpeedTest 설정",
+        "PHP Mailer Settings": "PHP Mailer 설정",
+        "Invites Settings": "초대 설정",
+        "Chat Settings": "채팅 설정",
+        "Delete ": "삭제: ",
+        "App Cluster": "앱 클러스터",
         "App ID": "App ID",
-        "API Secret": "API Secret",
-        "Auth Key": "Auth Key",
-        "Use Pusher SSL": "Use Pusher SSL",
-        "Message Sound": "Message Sound",
-        "# of Previous Messages": "# of Previous Messages",
-        "Note": "Note",
-        "Libraries": "Libraries",
-        "Body": "Body",
-        "Name": "Name",
-        "Template #4": "Template #4",
-        "Template #3": "Template #3",
-        "Template #2": "Template #2",
-        "Reminder Template": "Reminder Template",
-        "Invite User": "Invite User",
-        "Reset Password": "Reset Password",
-        "New Registration": "New Registration",
-        "Edit Template": "Edit Template",
-        "Send Welcome E-Mail": "Send Welcome E-Mail",
-        "Full URL": "Full URL",
-        "WAN Logo URL": "WAN Logo URL",
+        "API Secret": "API 비밀",
+        "Auth Key": "인증 키",
+        "Use Pusher SSL": "Pusher SSL 사용",
+        "Message Sound": "메시지 소리",
+        "# of Previous Messages": "이전 메시지 수",
+        "Note": "참고",
+        "Libraries": "라이브러리",
+        "Body": "몸체",
+        "Name": "이름",
+        "Template #4": "템플릿 #4",
+        "Template #3": "템플릿 #3",
+        "Template #2": "템플릿 #2",
+        "Reminder Template": "리마인더 템플릿",
+        "Invite User": "사용자 초대",
+        "Reset Password": "암호 재설정",
+        "New Registration": "신규 등록",
+        "Edit Template": "템플릿 편집",
+        "Send Welcome E-Mail": "환영 이메일 보내기",
+        "Full URL": "전체 URL",
+        "WAN Logo URL": "WAN 로고 URL",
         "https://domain.com/": "https://domain.com/",
-        "Domain Link Override": "Domain Link Override",
-        "Send": "Send",
-        "Send Test": "Send Test",
-        "i.e. same as username": "i.e. same as username",
-        "Sender Email": "Sender Email",
-        "Sender Name": "Sender Name",
-        "Verify Certificate": "Verify Certificate",
-        "Authentication": "Authentication",
-        "SMTP Port": "SMTP Port",
-        "SMTP Host": "SMTP Host",
-        "Results For cmd:": "Result For cmd:",
-        "Organizr Information:": "Organizr Information:",
-        "DB Schema": "DB Schema",
-        "Misc SSO": "Misc SSO",
+        "Domain Link Override": "도메인 링크 재정의",
+        "Send": "보내기",
+        "Send Test": "보내기 테스트",
+        "i.e. same as username": "예: 사용자 이름과 동일",
+        "Sender Email": "보낸 사람 이메일",
+        "Sender Name": "보낸 사람 이름",
+        "Verify Certificate": "인증서 확인",
+        "Authentication": "인증",
+        "SMTP Port": "SMTP 포트",
+        "SMTP Host": "SMTP 호스트",
+        "Results For cmd:": "cmd에서의 결과:",
+        "Organizr Information:": "Organizr 정보:",
+        "DB Schema": "DB 스키마",
+        "Misc SSO": "기타 SSO",
         "Tautulli SSO": "Tautulli SSO",
         "Plex SSO": "Plex SSO",
         "Ombi SSO": "Ombi SSO",
-        "Commands": "Commands",
-        "Input Command": "Input Command",
-        "Organizr Debug Area": "Organizr Debug Area",
+        "Commands": "명령",
+        "Input Command": "입력 명령",
+        "Organizr Debug Area": "Organizr 디버그 영역",
         "Google Ads": "Google Ads",
-        "DB Folder": "DB Folder",
-        "API Folder": "API Folder",
-        "Root Folder": "Root Folder",
-        "Organizr Paths": "Organizr Paths",
-        "Organizr News": "Organizr News",
-        "Close Error": "Close Error",
-        "An Error Occured": "An Error Occurred",
-        "Debug Area": "Debug Area",
-        "Tab Local URL": "Tab Local URL",
-        "PRELOAD": "PRELOAD",
-        "Use Ombi Alias Names": "Use Ombi Alias Names",
-        "TV Show Default Request": "TV Show Default Request",
-        "Add to Combined Downloader": "Add to Combined Downloader",
+        "DB Folder": "DB 폴더",
+        "API Folder": "API 폴더",
+        "Root Folder": "루트 폴더",
+        "Organizr Paths": "Organizr 경로",
+        "Organizr News": "Organizr 뉴스",
+        "Close Error": "닫기 오류",
+        "An Error Occured": "오류 발생됨",
+        "Debug Area": "디버그 영역",
+        "Tab Local URL": "탭 로컬 URL",
+        "PRELOAD": "사전 로드",
+        "Use Ombi Alias Names": "Ombi 별칭 이름 사용",
+        "TV Show Default Request": "TV 쇼 기본 요청",
+        "Add to Combined Downloader": "통합 다운로더에 추가",
         "http(s)://hostname:port/xmlrpc": "http(s)://hostname:port/xmlrpc",
-        "rTorrent API URL Override": "rTorrent API URL Override",
-        "Enable Notify Sounds": "Enable Notify Sounds",
-        "Remember Me Length": "Remember Me Length",
-        "Minimum Authentication for Debug Area": "Minimum Authentication for Debug Area",
-        "Account DN": "Account DN",
-        "Bind Username": "Bind Username",
-        "Account suffix - start with comma - ,ou=people,dc=domain,dc=tld": "Account suffix - start with comma - ,ou=people,dc=domain,dc=tld",
-        "Account Suffix": "Account Suffix",
-        "Account prefix - i.e. Controller\\ from Controller\\Username for AD - uid= for OpenLDAP": "Account prefix - i.e. Controller\\ from Controller\\Username for AD - uid= for OpenLDAP",
-        "Account Prefix": "Account Prefix",
-        "LDAP Backend Type": "LDAP Backend Type",
-        "Strict Plex Friends": "Strict Plex Friends",
+        "rTorrent API URL Override": "rTorrent API URL 재정의",
+        "Enable Notify Sounds": "알림 소리 활성화",
+        "Remember Me Length": "'기억하기' 길이",
+        "Minimum Authentication for Debug Area": "디버그 영역에 대한 최소 인증",
+        "Account DN": "계정 DN",
+        "Bind Username": "사용자 이름 바이딩",
+        "Account suffix - start with comma - ,ou=people,dc=domain,dc=tld": "계정 접미사 - 쉼표로 시작함 - ,ou=people,dc=domain,dc=tld",
+        "Account Suffix": "계정 접미사",
+        "Account prefix - i.e. Controller\\ from Controller\\Username for AD - uid= for OpenLDAP": "계정 접두사 - 예: Controller\\Username의 Controller\\(AD용) - uid= (OpenLDAP용)",
+        "Account Prefix": "계정 접두사",
+        "LDAP Backend Type": "LDAP 백엔드 유형",
+        "Strict Plex Friends": "엄격한 Plex 친구",
         "Unifi": "Unifi",
         "Pi-hole": "Pi-hole",
-        "Check For Updates": "Check For Updates",
-        "I will try and import new strings every Friday": "I will try and import new strings every Friday",
-        "Custom definitions": "Custom definitions",
-        "Show on small screens": "Show on small screens",
-        "Show on medium screens": "Show on medium screens",
-        "Show on large screens": "Show on large screens",
-        "Size": "Size",
-        "Colour": "Colour",
-        "Chart": "Chart",
-        "Data": "Data",
-        "Info": "Info",
+        "Check For Updates": "업데이트 확인",
+        "I will try and import new strings every Friday": "매주 금요일마다 새로운 문자열을 가져오도록 노력하겠습니다",
+        "Custom definitions": "맞춤 정의",
+        "Show on small screens": "작은 화면에 표시",
+        "Show on medium screens": "중간 화면에 표시",
+        "Show on large screens": "큰 화면에 표시",
+        "Size": "크기",
+        "Colour": "색상",
+        "Chart": "차트",
+        "Data": "데이터",
+        "Info": "정보",
         "Netdata": "Netdata",
-        "Toggle Title": "Toggle Title",
+        "Toggle Title": "제목 전환",
         "Speedtest": "Speedtest",
-        "Unit of Measurement": "Unit of Measurement",
-        "Enable Pollen": "Enable Pollen",
-        "Enable Air Quality": "Enable Air Quality",
-        "Enable Weather": "Enable Weather",
-        "Need Help With Coordinates?": "Need Help With Coordinates?",
-        "Longitude": "Longitude",
-        "Latitude": "Latitude",
+        "Unit of Measurement": "측정 단위",
+        "Enable Pollen": "Pollen 활성화",
+        "Enable Air Quality": "대기질 활성화",
+        "Enable Weather": "날씨 활성화",
+        "Need Help With Coordinates?": "좌표와 관련하여 도움이 필요하십니까?",
+        "Longitude": "경도",
+        "Latitude": "위도",
         "Weather-Air": "Weather-Air",
-        "Compact view": "Compact view",
+        "Compact view": "간략히 보기",
         "http://domain.com/monitorr/": "http://domain.com/monitorr/",
         "Monitorr": "Monitorr",
-        "Top Platforms": "Top Platforms",
-        "Top Users": "Top Users",
+        "Top Platforms": "상위 플랫폼",
+        "Top Users": "상위 사용자",
         "http://<ip>:<port>": "http://<ip>:<port>",
         "Tautulli": "Tautulli",
-        "Combine stat cards": "Combine stat cards",
+        "Combine stat cards": "통계 카드 결합",
         "http(s)://hostname:port/admin/": "http(s)://hostname:port/admin/",
-        "Youtube API Key": "Youtube API Key",
-        "Misc": "Misc",
-        "Multiple tags using CSV - tag1,tag2": "Multiple tags using CSV - tag1,tag2",
-        "Tags": "Tags",
+        "Youtube API Key": "Youtube API ",
+        "Misc": "기타",
+        "Multiple tags using CSV - tag1,tag2": "CSV를 사용하는 여러 태그 - tag1,tag2",
+        "Tags": "태그",
         "HealthChecks API URL": "HealthChecks API URL",
         "HealthChecks": "HealthChecks",
-        "Get Unifi Site": "Get Unifi Site",
-        "Grab Unifi Site": "Grab Unifi Site",
-        "Site Name": "Site Name",
+        "Get Unifi Site": "Unifi 사이트 얻기",
+        "Grab Unifi Site": "Unifi 사이트 잡기",
+        "Site Name": "사이트 이름",
         "Unifi API URL": "Unifi API URL",
-        "Show Denied": "Show Denied",
-        "Show Unapproved": "Show Unapproved",
-        "Show Approved": "Show Approved",
-        "Show Unavailable": "Show Unavailable",
-        "Show Available": "Show Available",
-        "Disable Certificate Check": "Disable Certificate Check",
+        "Show Denied": "거부된 항목 표시",
+        "Show Unapproved": "승인되지 않은 항목 표시",
+        "Show Approved": "승인된 항목 표시",
+        "Show Unavailable": "사용할 수 없는 항목 표시",
+        "Show Available": "사용할 수 있는 항목 표시",
+        "Disable Certificate Check": "인증서 확인 비활성화",
         "Organizr appends the url with": "Organizr appends the url with",
         "unless the URL ends in": "unless the URL ends in",
-        "ATTENTION": "ATTENTION",
-        "API Version": "API Version",
+        "ATTENTION": "중요사항",
+        "API Version": "API 버전",
         "JDownloader": "JDownloader",
-        "http(s)://hostname:port - make sure if Jelly fin to end url with /jellyfin": "http(s)://hostname:port - make sure if Jelly fin to end url with /jellyfin",
+        "http(s)://hostname:port - make sure if Jelly fin to end url with /jellyfin": "http(s)://hostname:port - Jellyfin이 URL을 /jellyfin으로 끝내는지 확인하세요",
         "Emby-Jellyfin": "Emby-Jellyfin",
-        "Tab Auto Action Minutes": "Tab Auto Action Minutes",
-        "Tab Auto Action": "Tab Auto Action",
-        "To revert back to default, save with no value defined in the relevant field.": "To revert back to default, save with no value defined in the relevant field.",
-        "e.g. UA-XXXXXXXXX-X": "e.g. UA-XXXXXXXXX-X",
-        "Google Analytics Tracking ID": "Google Analytics Tracking ID",
-        "Show Debug Errors": "Show Debug Errors",
-        "Use Logo instead of Title on Login Page": "Use Logo instead of Title on Login Page",
-        "Login Logo": "Login Logo",
-        "Meta Description": "Meta Description",
-        "HealthChecks Settings": "HealthChecks Settings",
+        "Tab Auto Action Minutes": "탭 자동 동작 시간(분)",
+        "Tab Auto Action": "탭 자동 동작",
+        "To revert back to default, save with no value defined in the relevant field.": "기본값으로 되돌리려면 해당 필드에 정의된 값을 입력하지 않고 저장하세요.",
+        "e.g. UA-XXXXXXXXX-X": "예: UA-XXXXXXXXX-X",
+        "Google Analytics Tracking ID": "Google Analytics 추적 ID",
+        "Show Debug Errors": "디버그 오류 표시",
+        "Use Logo instead of Title on Login Page": "로그인 페이지에 제목 대신 로고 사용",
+        "Login Logo": "로그인 로고",
+        "Meta Description": "메타 설명",
+        "HealthChecks Settings": "HealthChecks 설정",
         "AdamSmith": "AdamSmith",
-        "Emby User to be used as template for new users": "Emby User to be used as template for new users",
+        "Emby User to be used as template for new users": "신규 사용자를 위한 템플릿으로 사용할 Emby 사용자",
         "localhost:8086": "localhost:8086",
-        "Emby server adress": "Emby server adress",
-        "enter key from emby": "enter key from emby",
-        "Emby API key": "Emby API key",
-        "Music Labels (comma separated)": "Music Labels (comma separated)",
-        "Movies Labels (comma separated)": "Movies Labels (comma separated)",
-        "TV Labels (comma separated)": "TV Labels (comma separated)",
-        "Template #1": "Template #1",
-        "Enable Debug Output on Email Test": "Enable Debug Output on Email Test",
+        "Emby server adress": "Emby 서버 주소",
+        "enter key from emby": "emby에서 키를 입력하세요",
+        "Emby API key": "Emby API ",
+        "Music Labels (comma separated)": "음악 레이블 (쉼표로 구분됨)",
+        "Movies Labels (comma separated)": "영화 레이블 (쉼표로 구분됨)",
+        "TV Labels (comma separated)": "TV 레이블 (쉼표로 구분됨)",
+        "Template #1": "템플릿 #1",
+        "Enable Debug Output on Email Test": "이메일 테스트에서 디버그 출력 활성화",
         "i.e. 10.0.0.0/24 or 10.0.0.20": "i.e. 10.0.0.0/24 or 10.0.0.20",
-        "Auth Proxy Whitelist": "Auth Proxy Whitelist",
-        "i.e. X-Forwarded-User": "i.e. X-Forwarded-User",
-        "Auth Proxy Header Name": "Auth Proxy Header Name",
-        "Auth Proxy": "Auth Proxy",
-        "Enable Local Address Forward": "Enable Local Address Forward",
+        "Auth Proxy Whitelist": "인증 프록시 화이트리스트",
+        "i.e. X-Forwarded-User": "예시: X-Forwarded-User",
+        "Auth Proxy Header Name": "인증 프록시 헤더 이름",
+        "Auth Proxy": "인증 프록시",
+        "Enable Local Address Forward": "로컬 주소 전달 활성화",
         "http://home.local": "http://home.local",
-        "Local Address": "Local Address",
-        "only domain and tld - i.e. domain.com": "only domain and tld - i.e. domain.com",
-        "WAN Domain": "WAN Domain",
+        "Local Address": "로컬 주소",
+        "only domain and tld - i.e. domain.com": "도메인과 TLD만 - 예: domain.com",
+        "WAN Domain": "WAN 도메인",
         "i.e. 123.123.123.123": "예: 123.123.123.123",
-        "Override Local IP To": "Override Local IP To",
-        "Override Local IP From": "Override Local IP From",
-        "Disable Image Dropdown": "Disable Image Dropdown",
-        "Disable Icon Dropdown": "Disable Icon Dropdown",
-        "Enable Traefik Auth Redirect": "Enable Traefik Auth Redirect",
+        "Override Local IP To": "로컬 IP를 다음으로 재정의",
+        "Override Local IP From": "로컬 IP를 다음에서 재정의",
+        "Disable Image Dropdown": "이미지 드롭다운 비활성화",
+        "Disable Icon Dropdown": "아이템 드롭다운 비활성화",
+        "Enable Traefik Auth Redirect": "Traefik 인증 리다이렉트 활성화",
         "iFrame Sandbox": "iFrame 샌드박스",
         "Login Lockout Seconds": "로그인 잠금 시간(초)",
         "Max Login Attempts": "최대 로그인 시도 횟수",
         "Test Login": "로그인 테스트",
-        "Ignore External 2FA on Local Subnet": "Ignore External 2FA on Local Subnet",
+        "Ignore External 2FA on Local Subnet": "로컬 서브넷에서 외부 2FA 무시",
         "Large modal": "대형 모달",
         "An Error Occurred": "오류가 발생됨",
-        "Type your message": "귀하의 메시지 입력하기",
+        "Type your message": "귀하의 메시지를 입력하세요",
         "Bookmark Tabs": "북마크 탭",
         "Bookmark Categories": "북마크 카테고리",
         "Open Collective": "Open Collective",
-        "Github Sponsor": "Github 후원자",
+        "Github Sponsor": "Github 스폰서",
         "Backers": "후원자",
         "Tab Folder": "탭 폴더",
         "Cache Folder": "캐시 폴더",
@@ -629,34 +631,34 @@
         "Import Jellyfin Users": "Jellyfin 사용자 가져오기",
         "More": "더 많게",
         "Less": "더 적게",
-        "OpenCollective Sponsor": "OpenCollective Sponsor",
-        "Patreon Sponsor": "Patreon Sponsor",
-        "New Organizr API v2": "New Organizr API v2",
-        "Develop Branch Users - Please switch to Master for mean time": "Develop Branch Users - Please switch to Master for mean time",
-        "API V2 TESTING almost complete": "API V2 TESTING almost complete",
-        "Important Messages - Each message can now be ignored using ignore button": "Important Messages - Each message can now be ignored using ignore button",
-        "Minimum PHP Version change": "Minimum PHP Version change",
+        "OpenCollective Sponsor": "OpenCollective 스폰서",
+        "Patreon Sponsor": "Patreon 스폰서",
+        "New Organizr API v2": "새로운 Organizr API v2",
+        "Develop Branch Users - Please switch to Master for mean time": "Develop 브랜치 사용자 - 당분간 Master로 전환해주세요",
+        "API V2 TESTING almost complete": "API V2 테스트가 거의 완료되었습니다",
+        "Important Messages - Each message can now be ignored using ignore button": "중요 메시지 - 이제 무시 버튼을 사용하여 각 메시지를 무시할 수 있습니다",
+        "Minimum PHP Version change": "최소 PHP 버전 변경",
         "You": "당신",
-        "Drop Certificate file here to upload": "Drop Certificate file here to upload",
+        "Drop Certificate file here to upload": "업로드하려면 여기에 인증서 파일을 드롭하세요",
         "Custom Certificate Loaded": "사용자 지정 인증서 로드됨",
-        "By default, Organizr uses certificates from https://curl.se/docs/caextract.html": "By default, Organizr uses certificates from https://curl.se/docs/caextract.html",
-        "If you would like to use your own certificate, please upload it below.  You will then need to enable each homepage item to use it.": "If you would like to use your own certificate, please upload it below.  You will then need to enable each homepage item to use it.",
-        "i.e. X-Forwarded-Email": "i.e. X-Forwarded-Email",
-        "Auth Proxy Header Name for Email": "Auth Proxy Header Name for Email",
-        "Custom Recover Password Text": "Custom Recover Password Text",
-        "Disable Recover Password": "Disable Recover Password",
-        "Blacklisted Error Message": "Blacklisted Error Message",
-        "Blacklisted IP's": "Blacklisted IP's",
+        "By default, Organizr uses certificates from https://curl.se/docs/caextract.html": "기본적으로 Organizr는 https://curl.se/docs/caextract.html의 인증서를 사용합니다",
+        "If you would like to use your own certificate, please upload it below.  You will then need to enable each homepage item to use it.": "자체 인증서를 사용하고 싶다면 아래에 업로드해주세요. 그런 다음 이를 사용하려면 각 홈페이지 항목을 활성화해야 합니다.",
+        "i.e. X-Forwarded-Email": "예: X-Forwarded-Email",
+        "Auth Proxy Header Name for Email": "이메일의 인증 프록시 헤더 이름",
+        "Custom Recover Password Text": "사용자 지정 복구 암호 텍스트",
+        "Disable Recover Password": "복구 암호 비활성화",
+        "Blacklisted Error Message": "'블랙리스트에 등재됨' 오류 메시지",
+        "Blacklisted IP's": "블랙리스트에 등재된 IP",
         "http(s)://domain": "http(s)://domain",
-        "Traefik Domain for Return Override": "Traefik Domain for Return Override",
-        "Jellyfin Token": "Jellyfin Token",
+        "Traefik Domain for Return Override": "반환 재정의를 위한 Traefik 도메인",
+        "Jellyfin Token": "Jellyfin 토큰",
         "Jellyfin URL": "Jellyfin URL",
-        "Enable LDAP TLS": "Enable LDAP TLS",
-        "Enable LDAP SSL": "Enable LDAP SSL",
-        "Bind Password": "Bind Password",
+        "Enable LDAP TLS": "LDAP TLS 활성화",
+        "Enable LDAP SSL": "LDAP SSL 활성화",
+        "Bind Password": "암호 바인딩",
         "http(s) | ftp(s) | ldap(s)://hostname:port": "http(s) | ftp(s) | ldap(s)://hostname:port",
         "Plex Admin Username": "Plex 관리자 사용자 이름",
-        "Default Settings Tab": "Default Settings Tab",
+        "Default Settings Tab": "기본 설정 탭",
         "Certificate": "인증서",
         "Ping": "핑",
         "API": "API",
@@ -665,61 +667,268 @@
         "http(s)://domain.com": "http(s)://domain.com",
         "Jellyfin SSO URL": "Jellyfin SSO URL",
         "Jellyfin API URL": "Jellyfin API URL",
-        "Ombi Fallback Password": "Ombi Fallback Password",
-        "Ombi Fallback User": "Ombi Fallback User",
-        "Petio Fallback Password": "Petio Fallback Password",
-        "Petio Fallback User": "Petio Fallback User",
+        "Ombi Fallback Password": "Ombi 대체 암호",
+        "Ombi Fallback User": "Ombi 대체 사용자",
+        "Petio Fallback Password": "Petio 대체 암호",
+        "Petio Fallback User": "Petio 대체 사용자",
         "Petio URL": "Petio URL",
-        "Overseerr Fallback Password": "Overseerr Fallback Password",
-        "Overseerr Fallback User": "Overseerr Fallback User",
+        "Overseerr Fallback Password": "Overseerr 대체 암호",
+        "Overseerr Fallback User": "Overseerr 대체 사용자",
         "Overseerr URL": "Overseerr URL",
-        "Multiple URL's": "Multiple URL's",
-        "Using multiple SSO application will cause your Cookie Header item to increase.  If you haven't increased it by now, please follow this guide": "Using multiple SSO application will cause your Cookie Header item to increase.  If you haven't increased it by now, please follow this guide",
-        "Please Read First": "Please Read First",
+        "Multiple URL's": "다중 URL",
+        "Using multiple SSO application will cause your Cookie Header item to increase.  If you haven't increased it by now, please follow this guide": "여러 SSO 애플리케이션을 사용하면 쿠키 헤더 항목이 증가합니다. 지금까지 늘리지 않았다면 이 가이드를 따르세요.",
+        "Please Read First": "반드시 먼저 읽어주세요",
         "Jellyfin": "Jellyfin",
         "Petio": "Petio",
         "Overseerr": "Overseerr",
         "FYI": "FYI",
         "https://app.plex.tv/auth#?resetPassword": "https://app.plex.tv/auth#?resetPassword",
-        "Change Password on Plex Website": "Change Password on Plex Website",
+        "Change Password on Plex Website": "Plex 웹사이트에서 암호 변경",
         "Action": "동작",
         "IP": "IP",
-        "Browser": "Browser",
-        "Expires": "Expires",
-        "Created": "Created",
-        "Version": "Version",
-        "Files": "Files",
-        "Backup Organizr": "Backup Organizr",
-        "Create Backup": "Create Backup",
-        "Select or type Image": "Select or type Image",
-        "Choose": "Choose",
-        "Choose Blackberry Theme Icon": "Choose Blackberry Theme Icon",
-        "Save Tab Order": "Save Tab Order",
-        "Drag Homepage Items to Order Them": "Drag Homepage Items to Order Them",
-        "Preview": "Preview",
-        "Text Color": "Text Color",
-        "Background Color": "Background Color",
-        "Bookmark Tab Editor": "Bookmark Tab Editor",
-        "Add New Bookmark Category": "Add New Bookmark Category",
-        "Bookmark Category Editor": "Bookmark Category Editor",
-        "Auto-Expand Nav Bar": "Auto-Expand Nav Bar",
-        "Auto-Collapse Categories": "Auto-Collapse Categories",
-        "Expand All Categories": "Expand All Categories",
-        "Show Organizr Sign out & in Button on Sidebar": "Show Organizr Sign out & in Button on Sidebar",
-        "Show Organizr Docs Link": "Show Organizr Docs Link",
-        "Show Organizr Support Link": "Show Organizr Support Link",
-        "Show Organizr Feature Request Link": "Show Organizr Feature Request Link",
-        "Show GitHub Repo Link": "Show GitHub Repo Link",
-        "Theme CSS": "Theme CSS",
-        "Custom CSS": "Custom CSS",
-        "FavIcon": "FavIcon",
-        "Notifications": "Notifications",
-        "Colors & Themes": "Colors & Themes",
-        "Options": "Options",
-        "Login Page": "Login Page",
-        "Top Bar": "Top Bar",
-        "Bookmark Settings": "Bookmark Settings",
-        "HnL Settings": "HnL Settings",
-        "Not Installed": "Not Installed"
+        "Browser": "브라우저",
+        "Expires": "만료",
+        "Created": "생성됨",
+        "Version": "버전",
+        "Files": "파일",
+        "Backup Organizr": "Organizr 백업",
+        "Create Backup": "백업 생성",
+        "Select or type Image": "이미지 선택/입력",
+        "Choose": "선택",
+        "Choose Blackberry Theme Icon": "Blackberry 테마 아이콘 선택",
+        "Save Tab Order": "탭 순서 저장",
+        "Drag Homepage Items to Order Them": "홈페이지 항목을 끌어서 순서 지정하기",
+        "Preview": "미리보기",
+        "Text Color": "텍스트 색상",
+        "Background Color": "배경 색상",
+        "Bookmark Tab Editor": "북마크 탭 편집기",
+        "Add New Bookmark Category": "새 북마크 카테고리 추가",
+        "Bookmark Category Editor": "북마크 카테고리 편집기",
+        "Auto-Expand Nav Bar": "내비 바 자동 확장",
+        "Auto-Collapse Categories": "카테고리 자동 축소",
+        "Expand All Categories": "모든 카테고리 확장",
+        "Show Organizr Sign out & in Button on Sidebar": "사이드바에 Organizr 로그아웃 및 로그인 버튼 표시",
+        "Show Organizr Docs Link": "Organizr 문서 링크 표시",
+        "Show Organizr Support Link": "Organizr 지원 링크 표시",
+        "Show Organizr Feature Request Link": "Organizr 기능 요청 링크 표시",
+        "Show GitHub Repo Link": "GitHub 저장소 링크 표시",
+        "Theme CSS": "테마 CSS",
+        "Custom CSS": "사용자 지정 CSS",
+        "FavIcon": "파비콘",
+        "Notifications": "알림",
+        "Colors & Themes": "색상 및 테마",
+        "Options": "옵션",
+        "Login Page": "로그인 페이지",
+        "Top Bar": "상위 바",
+        "Bookmark Settings": "북마크 설정",
+        "HnL Settings": "HnL 설정",
+        "Not Installed": "설치되지 않음",
+        "Money not an option?  No problem.  Show some love to this Google Ad below:": "돈은 선택사항이 아닌가요? 문제없습니다. 아래 구글 광고에 많은 사랑을 보내주세요:",
+        "Please click the button to continue.": "계속하려면 아래의 버튼을 클릭하세요.",
+        "Need specialized support or just want to support Organizr?  If so head to Open Collective...": "전문적인 지원이 필요하거나 단지 Organizr를 지원하고 싶으신가요? 그렇다면 Open Collective로 가세요...",
+        "Need specialized support or just want to support Organizr?  If so head to Patreon...": "전문적인 지원이 필요하거나 단지 Organizr를 지원하고 싶으신가요? 그렇다면 Patreon으로 가세요...",
+        "Want to donate a small amount of Crypto?.": "소량의 암호화폐를 기부하고 싶으신가요?.",
+        "Please use the QR Code or Wallet ID.": "QR 코드나 지갑 ID를 이용해 주세요.",
+        "If you use the Square Cash App, you can donate with that if you like.": "Square Cash 앱을 사용하는 경우 원하는 경우 이를 통해 기부할 수 있습니다.",
+        "I have chosen to go with PayPal Pools so everyone can see how much people have donated.": "저는 모든 사람들이 얼마나 많은 기부를 했는지 볼 수 있도록 페이팔 풀스를 선택했습니다.",
+        "Want to show support on Github?  Sponsor me :)": "Github에서 지원을 보여주고 싶으십니까? 후원해주세요 :)",
+        "If messages get stuck sending, please turn this option off.": "메시지 전송이 중단되면 이 옵션을 꺼주세요.",
+        "Save and reload!": "저장 후 다시 로드하세요!",
+        "Copy and paste the 4 values into Organizr": "4개의 값을 복사하여 Organizr에 붙여넣습니다",
+        "Click the overview tab on top left": "왼쪽 상단의 개요(overview) 탭을 클릭하세요",
+        "Frontend (JQuery) - Backend (PHP)": "프론트엔드 (JQuery) - 백엔드 (PHP)",
+        "Create an App called whatever you like and choose a cluster (Close to you)": "원하는 이름으로 앱을 만들고 클러스터를 선택하세요 (가까운 위치)",
+        "Signup for Pusher [FREE]": "Pusher에 가입합니다 [무료]",
+        "Connection": "연결",
+        "Enabled": "활성화됨",
+        "Internal URL": "내부 URL",
+        "External URL": "외부 URL",
+        "UUID": "UUID",
+        "Service Name": "서비스 이름",
+        "Make sure to save before using the import button on Services tab": "서비스 탭의 가져오기 버튼을 사용하기 전에 반드시 저장하세요",
+        "Do not use a Read-Only Token as that will not give a correct UUID for sending the results to HealthChecks.io": "결과를 HealthChecks.io로 보내기 위한 올바른 UUID를 제공하지 않으므로 읽기 전용 토큰을 사용하지 마십시오",
+        "Please use a Full Access Token": "전체 액세스(Full Access) 토큰을 사용하세요.",
+        "URL for HealthChecks API": "HealthChecks API의 URL",
+        "403 Error as Success": "403 오류를 성공으로 표시",
+        "401 Error as Success": "401 오류를 성공으로 표시",
+        "HealthChecks Ping URL": "HealthChecks 핑 URL",
+        "URL for HealthChecks Ping": "HealthChecks 핑의 URL",
+        "As often as you like - i.e. every 1 minute": "원하는 만큼 주기적으로 갱신 - 예: 1분 마다",
+        "Frequency": "주파수",
+        "CRON Job URL": "CRON 작업 URL",
+        "Once this plugin is setup, you will need to setup a CRON job": "이 플러그인이 한 번 설정되면 CRON 작업을 설정해야 합니다",
+        "Services": "서비스",
+        "Import Services": "서비스 가져오기",
+        "Add New Service": "새 서비스 추가",
+        "After enabling for the first time, please reload the page - Menu is located under User menu on top right": "처음 활성화한 후 페이지를 새로고침하세요 - 메뉴는 오른쪽 상단의 사용자 메뉴 아래에 있습니다",
+        "Emby Settings": "Emby 설정",
+        "Plex Settings": "Plex 설정",
+        "Backend": "백엔드",
+        "Templates": "템플릿",
+        "Test & Options": "테스트 및 옵션",
+        "Sender Information": "보낸 사람 정보",
+        "Host": "호스트",
+        "Open your custom Bookmark page via menu.": "메뉴를 통해 사용자 정의 북마크 페이지를 여세요.",
+        "Create Bookmark tabs in the new area in": "다음을 통해 새 영역에 북마크 탭을 생성하세요:",
+        "Create Bookmark categories in the new area in": "다음을 통해 새 영역에 북마크 카테고리를 생성하세요:",
+        "Add tab that points to": "다음을 가리키는 탭을 추가하세요:",
+        "and set it's type to": "그리고 유형을 다음으로 설정하세요:",
+        "Checking for bookmark default category...": "북마크 기본 카테고리를 확인하는 중...",
+        "Checking for Bookmark tab...": "북마크 탭을 확인하는 중...",
+        "Automatic Setup Tasks": "자동 설정 작업",
+        "Located at": "다음에 위치함:",
+        "Custom Certificate Status": "사용자 지정 인증서 상태",
+        "Will play a sound if the server goes down and will play sound if comes back up.": "서버가 다운되면 소리가 나고, 서버가 다시 시작되면 소리가 납니다.",
+        "Please choose a unique value for added security": "보안을 강화하려면 고유한 값을 선택하세요",
+        "IPv4 only at the moment - This must be set to work, will accept subnet or IP address": "현재는 IPv4만 가능 - 작동하도록 설정해야 하며, 서브넷 혹은 IP 주소를 허용합니다",
+        "Enable option to set Auth Proxy Header Login": "인증 프록시 헤더 로그인을 설정하는 옵션을 활성화합니다",
+        "Text or HTML for recovery password section": "복구 암호 섹션에 대한 텍스트 혹은 HTML",
+        "Disables recover password area": "암호 복구 영역을 비활성화합니다",
+        "Enables the local address forward if on local address and accessed from WAN Domain": "로컬 주소에 있고 WAN 도메인에서 액세스하는 경우 로컬 주소 전달을 활성화합니다",
+        "Full local address of organizr install - i.e. http://home.local or http://192.168.0.100": "Organizr 설치의 전체 로컬 주소 - 예: http://home.local 혹은 http://192.168.0.100",
+        "Enter domain if you wish to be forwarded to a local address - Local Address filled out on next item": "로컬 주소로 전달할 경우 도메인 입력 - 다음 항목에 로컬 주소 입력하기",
+        "IPv4 only at the moment - This will set your login as local if your IP falls within the From and To": "현재 IPv4만 가능 - IP가 수신인 및 수신인에 속할 경우 로그인이 로컬로 설정됩니다",
+        "Default status of Remember Me button on login screen": "로그인 화면의 기억하기 버튼 기본 상태",
+        "Number of days cookies and tokens will be valid for": "다음에 대한 쿠키 및 토큰이 유효한 날 수:",
+        "Enable this to hide the Registration button on the login screen": "로그인 화면에서 등록 버튼을 숨기려면 이 옵션을 활성화하세요",
+        "Sets the password for the Registration form on the login screen": "로그인 화면에서 등록 양식의 암호를 설정하세요",
+        "WARNING! This will block anyone with these IP's": "경고! 이 IP를 가진 사람은 누구나 차단됩니다",
+        "WARNING! This can potentially mess up your iFrames": "경고! 이는 잠재적으로 iFrame을 망칠 수 있습니다",
+        "Please use a FQDN on this URL Override": "이 URL 재정의에는 FQDN을 사용하세요",
+        "This will enable the webserver to forward errors so traefik will accept them": "이렇게 하면 웹서버가 오류를 전달할 수 있으므로 traefik이 오류를 수락합니다",
+        "Please make sure to use local IP address and port - You also may use local dns name too.": "로컬 IP 주소와 포트를 사용해야 합니다. - 로컬 DNS 이름도 사용할 수 있습니다.",
+        "Remember! Please save before using the test button!": "기억하세요! 테스트 버튼을 사용하기 전 꼭 저장해주세요!",
+        "This will enable the use of TLS for LDAP connections": "LDAP 연결에 TLS를 사용할 수 있게 됩니다",
+        "This will enable the use of SSL for LDAP connections": "LDAP 연결에 SSL을 사용할 수 있게 됩니다",
+        "Enabling this will bypass external 2FA security if user is on local Subnet": "이 기능을 활성화하면 사용자가 로컬 서브넷에 있는 경우 외부 2FA 보안을 우회합니다",
+        "Enabling this will only allow Friends that have shares to the Machine ID entered above to login, Having this disabled will allow all Friends on your Friends list to login": "이 기능을 활성화하면 위에 입력한 컴퓨터 ID에 공유된 친구만 로그인할 수 있으며, 이 기능을 비활성화하면 친구 목록에 있는 모든 친구가 로그인할 수 있습니다",
+        "Since you are using the official Docker image, you can just restart your Docker container to update Organizr": "공식 Docker 이미지를 사용하고 있으므로 Docker 컨테이너를 다시 시작하여 Organizr를 업데이트할 수 있습니다",
+        "Since you are using the Official Docker image, Change the image to change the branch": "공식 Docker 이미지를 사용하고 있으므로 이미지를 변경하여 브랜치를 변경합니다",
+        "Choose which Settings Tab to be default when opening settings page": "설정 페이지를 열 때 기본값으로 설정할 설정 탭을 선택하세요",
+        "Please make sure to use the same (sub)domain to access Jellyfin as Organizr's": "Jellyfin에 접속하려면 Organizr와 동일한 (하위)도메인을 사용해야 합니다",
+        "Please make sure to use the local address to the API": "API에 로컬 주소를 사용했는지 확인하세요",
+        "DO NOT SET THIS TO YOUR ADMIN ACCOUNT. We recommend you create a local account as a \"catch all\" for when Organizr is unable to perform SSO.  Organizr will request a User Token based off of this user credentials": "이 계정을 관리자 계정으로 설정하지 마십시오. Organizr가 SSO를 수행할 수 없는 경우를 대비하여 \"catch all\"로 로컬 계정을 생성하는 것이 좋습니다. Organizr는 이 사용자 자격 증명을 기반으로 사용자 토큰을 요청합니다.",
+        "Purge Log": "로그 제거",
+        "Avatar": "아바타",
+        "Date Registered": "등록 날짜",
+        "Group": "그룹",
+        "Locked": "잠김",
+        "Copy to Clipboard": "클립보드에 복사",
+        "Choose action:": "동작 선택:",
+        "You may enter multiple URL's using the CSV format.  i.e. link#1,link#2,link#3": "CSV 형식을 사용하여 여러 개의 URL을 입력할 수 있습니다.  예: link#1,link#2,link#3",
+        "Used to set the description for SEO meta tags": "SEO 메타 태그에 대한 설명을 설정하는 데 사용됩니다",
+        "Also sets the title of your site": "또한 사이트 제목을 설정합니다",
+        "Up to date": "이미 최신임",
+        "Loading Pihole...": "Pihole 로드 중...",
+        "Loading Unifi...": "Unifi 로드 중...",
+        "Loading Weather...": "Weather 로드 중...",
+        "Loading Tautulli...": "Tautulli 로드 중...",
+        "Loading Health Checks...": "Health Checks 로드 중...",
+        "Loading Speedtest...": "Speedtest 로드 중...",
+        "Loading Uptime Kuma...": "Uptime Kuma 로드 중...",
+        "Health Checks": "Health Checks",
+        "UniFi": "UniFi",
+        "Connection Error to rTorrent": "rTorrent 연결 오류",
+        "Request a Show or Movie": "쇼 혹은 영화 요청",
+        "Marketplace Settings": "스토어 설정",
+        "Theme Settings": "테마 설정",
+        "Plugin Settings": "플러그인 설정",
+        "External Marketplace Repo": "외부 스토어 리포지토리",
+        "Only supports Github repos": "Github 리포지토리만 지원합니다",
+        "Github Person Access Token": "Github 개인 액세스 토큰",
+        "The Github Person Access Token will help with API rate limiting as well as let you access your own Private Repos": "Github 개인 액세스 토큰은 API 속도 제한에 도움이 될 뿐만 아니라 자신의 개인 저장소에 액세스할 수 있게 해줍니다",
+        "Check for Theme Updates": "테마 업데이트 확인",
+        "MIN GROUP": "최소 그룹",
+        "MAX GROUP": "최대 그룹",
+        "ADD TO ADMIN": "ADMIN 계정에 추가",
+        "Other": "기타",
+        "Socks": "Socks",
+        "Enable Debug Log": "디버그 로그 활성화",
+        "Enable the option to have socks output to logs": "Socks를 로그로 출력하는 옵션을 활성화합니다",
+        "Max Debug Data Rows": "최대 디버그 데이터 행 수",
+        "Max amount of rows in debug log": "디버그 로그의 최대 행 수를 지정합니다",
+        "Logo URL": "로고 URL",
+        "Organizr Title": "Organizr 제목",
+        "Side Menu": "사이드 메뉴",
+        "Allow Side Menu to be Collapsable": "사이드 메뉴 접기 허용",
+        "Collapse Side Menu after clicking Tab": "탭을 클릭한 후 사이드 메뉴 접기",
+        "Side Menu Collapsed at Launch": "실행시 사이드 메뉴 접기",
+        "Disable Homepage Saved Modal": "홈페이지 저장 모달 비활성화",
+        "Disable the modal when saving homepage config settings": "홈페이지 구성 설정을 저장할 때 모달을 비활성화합니다",
+        "Show Easter Eggs": "이스터 에그 표시",
+        "API Documentation": "API 문서",
+        "Organizr Docs": "Organizr 문서",
+        "API Key/Token": "API 키/토큰",
+        "Plex Admin Username or Email": "Plex Admin 사용자 이름 혹은 이메일",
+        "Overseerr Fallback Email": "Overseerr 대체 이메일",
+        "Petio Fallback Email": "Petio 대체 이메일",
+        "Ombi Fallback Email": "Ombi 대체 이메일",
+        "Komga Fallback Email": "Komga 대체 이메일",
+        "Komga Fallback Password": "Komga 대체 암호",
+        "Komga Master Password": "Komga 마스터 암호",
+        "Use Random Media Wallpaper From Media Server": "미디어 서버에서 임의의 미디어 배경화면 사용",
+        "Login Wallpaper URL": "로그인 배경화면 URL",
+        "Organizr Enable Cron Instructions": "Organizr Cron 활성화 지침",
+        "Check Cron Status": "Cron 상태 확인",
+        "Auto-Update Organizr": "Organizr 자동 업데이트",
+        "Auto-Backup Organizr": "Organizr 자동 백업",
+        "Cron Schedule": "Cron 스케쥴",
+        "You may use either Cron format or - @hourly, @daily, @monthly": "Cron 형식을 사용하거나 다음 형식을 사용할 수 있습니다 - @hourly, @daily, @monthly",
+        "# Backups Keep": "보관할 백업 수",
+        "Number of backups to keep": "보관할 백업 수를 지정합니다",
+        "Backup Save Path": "백업 저장 경로",
+        "Folder path to save Organizr Backups - Please test before saving": "Organizr 백업을 저장할 폴더 경로 - 저장하기 전에 테스트하세요",
+        "Override Local IP or Subnet": "로컬 IP 혹은 서브넷 재정의",
+        "Log Save Path": "로그 저장 경로",
+        "Folder path to save Organizr Logs - Please test before saving": "Organizr 로그를 저장할 폴더 경로 - 저장하기 전에 테스트하세요",
+        "Include Database Queries": "데이터베이스 쿼리 포함",
+        "Include Database queries in debug logs": "디버그 로그에 데이터베이스 쿼리 포함",
+        "Live Update Refresh": "라이브 업데이트 새로 고침",
+        "Send Logs to Slack": "Slack에 로그 보내기",
+        "Send Logs to Slack as well": "Slack에도 로그 보내기",
+        "Slack Webhook URL": "Slack 웹훅 URL",
+        "If using Discord make sure to end the URL with /slack": "Discord를 사용하는 경우 URL이 /slack로 끝나야 합니다",
+        "Log Level": "로그 수준",
+        "Maximum Log Files": "최대 로그 파일",
+        "Number of log files to preserve": "보존할 로그 파일 수를 지정합니다",
+        "Log Page Size": "로그 페이지 크기",
+        "Slack Log Level": "Slack 로그 수준",
+        "Slack Channel for Webhook": "웹훅용 Slack 채널",
+        "Channel ID for webhook - Not needed for Discord": "웹훅용 채널 ID - Discord에는 필요하지 않습니다",
+        "Test Slack": "Slack 테스트",
+        "Test only sends a warning message so make sure Slack Log Level is Warning when testing": "테스트는 경고 메시지만 보내므로 테스트 시 Slack 로그 수준이 경고인지 확인하세요",
+        "Check For Update": "업데이트 확인",
+        "Check for update on Organizr load": "Organizr가 로드될 때 업데이트 확인",
+        "Match UserAgent": "UserAgent 일치",
+        "Match Browser UserAgent to Token UserAgent - Can be very aggressive on matching": "브라우저 UserAgent를 토큰 UserAgent와 일치 - 일치 시 매우 공격적일 수 있음",
+        "Cookie Header Guide": "쿠키 헤더 가이드",
+        "Custom Certificate not found - please upload below": "사용자 지정 인증서를 찾을 수 없습니다 - 아래의 드롭박스에 업로드하세요",
+        "Libraries to Include": "포함할 라이브러리",
+        "Libraries to Exclude": "제외할 라이브러리",
+        "User Information Without IP": "IP가 없는 사용자 정보",
+        "Only shows username and no IP information": "사용자 이름만 표시되고 IP 정보는 표시되지 않습니다",
+        "Active Streams": "활성 스트림",
+        "Recent Items": "최근 항목",
+        "Media Search": "미디어 검색",
+        "Media Search Server": "미디어 검색 서버",
+        "Playlists": "재생 목록",
+        "Image Cache Quality": "이미지 캐시 품질",
+        "Use Tautulli custom names for users": "사용자에 대해 Tautulli 사용자 지정 이름 사용",
+        "Library Stats": "라이브러리 통계",
+        "Viewing Stats": "뷰잉 통계",
+        "Misc Stats": "기타 통계",
+        "Use Friendly Name": "친숙한 이름 사용",
+        "Use the friendly name set in tautulli for users.": "사용자를 위해 tautulli에 설정된 친숙한 이름을 사용합니다.",
+        "Multiple API Key/Token's": "다중 API 키/토큰",
+        "Use Custom Certificate": "사용자 지정 인증서 사용",
+        "Show monitor latency": "모니터 지연 시간 표시",
+        "Locale": "지역",
+        "Stats": "통계",
+        "Total Queries": "총 쿼리",
+        "Queries Blocked": "차단된 쿼리",
+        "Percent Blocked": "차단된 비율",
+        "Processing Time": "처리 시간",
+        "Domains on Blocklist": "차단 목록에 있는 도메인",
+        "Disable access from user dropdown menu": "사용자 드롭다운 메뉴에서 액세스 비활성화"
     }
 }

BIN
plugins/images/tabs/amule.png


BIN
plugins/images/tabs/backrest.png


BIN
plugins/images/tabs/copyparty.png


BIN
plugins/images/tabs/flaresolverr.png


BIN
plugins/images/tabs/prompage.png


BIN
plugins/images/tabs/rustdesk.png


BIN
plugins/images/tabs/trilium.png


BIN
plugins/images/tabs/zipline.png