protected function getCatalogPath($locale, $domain) {
		if ($this->basePath === null) {
			throw new NoPath('Base path definition required');
		}
		
		// Path to the file resolve
		$pathParts = [$this->basePath];
		
		foreach ($this->pathTemplate as $part) {
			if ($part === self::TPL_LOCALE) {
				$pathParts[] = $locale;
				continue;
			}
			
			if ($part === self::TPL_DOMAIN) {
				$pathParts[] = $domain;
			}
		}
		
		// Filename resolve
		$flenameParts = [];
		
		foreach ($this->filenameTemplate as $part) {
			if ($part === self::TPL_LOCALE) {
				$flenameParts[] = $locale;
				continue;
			}
			
			if ($part === self::TPL_DOMAIN) {
				$flenameParts[] = $domain;
			}
		}
		
		$filename = implode($this->filenameSeparator, $flenameParts);
		
		// Extension resolve
		if ($this->filenameExtension !== null) {
			$filename .= '.' . $this->filenameExtension;
		}
		
		$pathParts[] = $filename;
		
		return implode(DIRECTORY_SEPARATOR, $pathParts);
	}