Add ko [Korean] translations

Add partial translations for korean.
This commit is contained in:
OxygenCobalt 2021-02-14 10:35:22 -07:00
parent 62572e7e52
commit b6ac897314
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
17 changed files with 141 additions and 56 deletions

View file

@ -1,6 +1,5 @@
package org.oxycblt.auxio package org.oxycblt.auxio
import android.animation.LayoutTransition
import android.content.res.ColorStateList import android.content.res.ColorStateList
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
@ -10,7 +9,6 @@ import android.view.ViewGroup
import androidx.core.graphics.ColorUtils import androidx.core.graphics.ColorUtils
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import androidx.navigation.NavController import androidx.navigation.NavController
import androidx.navigation.NavOptions import androidx.navigation.NavOptions
import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.NavHostFragment
@ -71,13 +69,6 @@ class MainFragment : Fragment() {
binding.lifecycleOwner = this binding.lifecycleOwner = this
// Apply custom interpolation effects
// The container layout types differ in the land/port layouts so it has to be cast to their parent instead.
(binding.controlsContainer as ViewGroup).layoutTransition = LayoutTransition().apply {
setInterpolator(LayoutTransition.APPEARING, FastOutSlowInInterpolator())
setInterpolator(LayoutTransition.DISAPPEARING, FastOutSlowInInterpolator())
}
binding.navBar.apply { binding.navBar.apply {
itemIconTintList = navTints itemIconTintList = navTints
itemTextColor = navTints itemTextColor = navTints

View file

@ -13,7 +13,7 @@ import org.oxycblt.auxio.music.BaseModel
import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.music.Song
import org.oxycblt.auxio.playback.PlaybackViewModel import org.oxycblt.auxio.playback.PlaybackViewModel
import org.oxycblt.auxio.recycler.DiffCallback import org.oxycblt.auxio.recycler.DiffCallback
import org.oxycblt.auxio.recycler.viewholders.BaseHolder import org.oxycblt.auxio.recycler.viewholders.BaseViewHolder
import org.oxycblt.auxio.recycler.viewholders.Highlightable import org.oxycblt.auxio.recycler.viewholders.Highlightable
import org.oxycblt.auxio.ui.Accent import org.oxycblt.auxio.ui.Accent
import org.oxycblt.auxio.ui.applyAccents import org.oxycblt.auxio.ui.applyAccents
@ -107,7 +107,7 @@ class AlbumDetailAdapter(
inner class AlbumHeaderViewHolder( inner class AlbumHeaderViewHolder(
private val binding: ItemAlbumHeaderBinding private val binding: ItemAlbumHeaderBinding
) : BaseHolder<Album>(binding) { ) : BaseViewHolder<Album>(binding) {
override fun onBind(data: Album) { override fun onBind(data: Album) {
binding.album = data binding.album = data
@ -126,7 +126,7 @@ class AlbumDetailAdapter(
inner class AlbumSongViewHolder( inner class AlbumSongViewHolder(
private val binding: ItemAlbumSongBinding, private val binding: ItemAlbumSongBinding,
) : BaseHolder<Song>(binding, doOnClick, doOnLongClick), Highlightable { ) : BaseViewHolder<Song>(binding, doOnClick, doOnLongClick), Highlightable {
private val normalTextColor = binding.songName.currentTextColor private val normalTextColor = binding.songName.currentTextColor
private val inactiveTextColor = binding.songTrack.currentTextColor private val inactiveTextColor = binding.songTrack.currentTextColor

View file

@ -13,7 +13,7 @@ import org.oxycblt.auxio.music.Artist
import org.oxycblt.auxio.music.BaseModel import org.oxycblt.auxio.music.BaseModel
import org.oxycblt.auxio.playback.PlaybackViewModel import org.oxycblt.auxio.playback.PlaybackViewModel
import org.oxycblt.auxio.recycler.DiffCallback import org.oxycblt.auxio.recycler.DiffCallback
import org.oxycblt.auxio.recycler.viewholders.BaseHolder import org.oxycblt.auxio.recycler.viewholders.BaseViewHolder
import org.oxycblt.auxio.recycler.viewholders.Highlightable import org.oxycblt.auxio.recycler.viewholders.Highlightable
import org.oxycblt.auxio.ui.Accent import org.oxycblt.auxio.ui.Accent
import org.oxycblt.auxio.ui.applyAccents import org.oxycblt.auxio.ui.applyAccents
@ -106,7 +106,7 @@ class ArtistDetailAdapter(
inner class ArtistHeaderViewHolder( inner class ArtistHeaderViewHolder(
private val binding: ItemArtistHeaderBinding private val binding: ItemArtistHeaderBinding
) : BaseHolder<Artist>(binding) { ) : BaseViewHolder<Artist>(binding) {
override fun onBind(data: Artist) { override fun onBind(data: Artist) {
binding.artist = data binding.artist = data
@ -126,7 +126,7 @@ class ArtistDetailAdapter(
// Generic ViewHolder for a detail album // Generic ViewHolder for a detail album
inner class ArtistAlbumViewHolder( inner class ArtistAlbumViewHolder(
private val binding: ItemArtistAlbumBinding, private val binding: ItemArtistAlbumBinding,
) : BaseHolder<Album>(binding, doOnClick, doOnLongClick), Highlightable { ) : BaseViewHolder<Album>(binding, doOnClick, doOnLongClick), Highlightable {
private val normalTextColor = binding.albumName.currentTextColor private val normalTextColor = binding.albumName.currentTextColor
override fun onBind(data: Album) { override fun onBind(data: Album) {

View file

@ -13,7 +13,7 @@ import org.oxycblt.auxio.music.Genre
import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.music.Song
import org.oxycblt.auxio.playback.PlaybackViewModel import org.oxycblt.auxio.playback.PlaybackViewModel
import org.oxycblt.auxio.recycler.DiffCallback import org.oxycblt.auxio.recycler.DiffCallback
import org.oxycblt.auxio.recycler.viewholders.BaseHolder import org.oxycblt.auxio.recycler.viewholders.BaseViewHolder
import org.oxycblt.auxio.recycler.viewholders.Highlightable import org.oxycblt.auxio.recycler.viewholders.Highlightable
import org.oxycblt.auxio.ui.Accent import org.oxycblt.auxio.ui.Accent
import org.oxycblt.auxio.ui.applyAccents import org.oxycblt.auxio.ui.applyAccents
@ -108,7 +108,7 @@ class GenreDetailAdapter(
inner class GenreHeaderViewHolder( inner class GenreHeaderViewHolder(
private val binding: ItemGenreHeaderBinding private val binding: ItemGenreHeaderBinding
) : BaseHolder<Genre>(binding) { ) : BaseViewHolder<Genre>(binding) {
override fun onBind(data: Genre) { override fun onBind(data: Genre) {
binding.genre = data binding.genre = data
binding.detailModel = detailModel binding.detailModel = detailModel
@ -126,7 +126,7 @@ class GenreDetailAdapter(
inner class GenreSongViewHolder( inner class GenreSongViewHolder(
private val binding: ItemGenreSongBinding, private val binding: ItemGenreSongBinding,
) : BaseHolder<Song>(binding, doOnClick, doOnLongClick), Highlightable { ) : BaseViewHolder<Song>(binding, doOnClick, doOnLongClick), Highlightable {
private val normalTextColor = binding.songName.currentTextColor private val normalTextColor = binding.songName.currentTextColor
override fun onBind(data: Song) { override fun onBind(data: Song) {

View file

@ -16,8 +16,6 @@ import android.support.v4.media.MediaMetadataCompat
import android.support.v4.media.session.MediaSessionCompat import android.support.v4.media.session.MediaSessionCompat
import android.view.KeyEvent import android.view.KeyEvent
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import androidx.media2.session.MediaController
import androidx.media2.session.MediaSession
import com.google.android.exoplayer2.C import com.google.android.exoplayer2.C
import com.google.android.exoplayer2.ExoPlaybackException import com.google.android.exoplayer2.ExoPlaybackException
import com.google.android.exoplayer2.MediaItem import com.google.android.exoplayer2.MediaItem

View file

@ -3,6 +3,7 @@ package org.oxycblt.auxio.playback.queue
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.view.MotionEvent import android.view.MotionEvent
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.widget.TooltipCompat
import androidx.recyclerview.widget.AsyncListDiffer import androidx.recyclerview.widget.AsyncListDiffer
import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@ -15,7 +16,7 @@ import org.oxycblt.auxio.music.Header
import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.music.Song
import org.oxycblt.auxio.playback.PlaybackViewModel import org.oxycblt.auxio.playback.PlaybackViewModel
import org.oxycblt.auxio.recycler.DiffCallback import org.oxycblt.auxio.recycler.DiffCallback
import org.oxycblt.auxio.recycler.viewholders.BaseHolder import org.oxycblt.auxio.recycler.viewholders.BaseViewHolder
import org.oxycblt.auxio.recycler.viewholders.HeaderViewHolder import org.oxycblt.auxio.recycler.viewholders.HeaderViewHolder
import org.oxycblt.auxio.ui.inflater import org.oxycblt.auxio.ui.inflater
@ -132,7 +133,7 @@ class QueueAdapter(
*/ */
inner class QueueSongViewHolder( inner class QueueSongViewHolder(
private val binding: ItemQueueSongBinding, private val binding: ItemQueueSongBinding,
) : BaseHolder<Song>(binding) { ) : BaseViewHolder<Song>(binding) {
@SuppressLint("ClickableViewAccessibility") @SuppressLint("ClickableViewAccessibility")
override fun onBind(data: Song) { override fun onBind(data: Song) {
@ -159,12 +160,13 @@ class QueueAdapter(
*/ */
inner class UserQueueHeaderViewHolder( inner class UserQueueHeaderViewHolder(
private val binding: ItemActionHeaderBinding private val binding: ItemActionHeaderBinding
) : BaseHolder<Header>(binding) { ) : BaseViewHolder<Header>(binding) {
init { init {
binding.headerButton.contentDescription = binding.headerButton.context.getString( binding.headerButton.apply {
R.string.description_clear_user_queue contentDescription = context.getString(R.string.description_clear_user_queue)
) TooltipCompat.setTooltipText(this, contentDescription)
}
} }
override fun onBind(data: Header) { override fun onBind(data: Header) {

View file

@ -13,7 +13,7 @@ import org.oxycblt.auxio.music.BaseModel
* @param doOnLongClick (Optional, defaults to null) Functions that specifics what to do on a long click. Null if nothing should be done. * @param doOnLongClick (Optional, defaults to null) Functions that specifics what to do on a long click. Null if nothing should be done.
* @author OxygenCobalt * @author OxygenCobalt
*/ */
abstract class BaseHolder<T : BaseModel>( abstract class BaseViewHolder<T : BaseModel>(
private val binding: ViewDataBinding, private val binding: ViewDataBinding,
private val doOnClick: ((data: T) -> Unit)? = null, private val doOnClick: ((data: T) -> Unit)? = null,
private val doOnLongClick: ((view: View, data: T) -> Unit)? = null private val doOnLongClick: ((view: View, data: T) -> Unit)? = null
@ -52,7 +52,7 @@ abstract class BaseHolder<T : BaseModel>(
/** /**
* Function that performs binding operations unique to the inheriting viewholder. * Function that performs binding operations unique to the inheriting viewholder.
* Add any specialized code to an override of this instead of [BaseHolder] itself. * Add any specialized code to an override of this instead of [BaseViewHolder] itself.
*/ */
protected abstract fun onBind(data: T) protected abstract fun onBind(data: T)
} }

View file

@ -38,7 +38,7 @@ class SongViewHolder private constructor(
private val binding: ItemSongBinding, private val binding: ItemSongBinding,
doOnClick: (data: Song) -> Unit, doOnClick: (data: Song) -> Unit,
doOnLongClick: (view: View, data: Song) -> Unit doOnLongClick: (view: View, data: Song) -> Unit
) : BaseHolder<Song>(binding, doOnClick, doOnLongClick) { ) : BaseViewHolder<Song>(binding, doOnClick, doOnLongClick) {
override fun onBind(data: Song) { override fun onBind(data: Song) {
binding.song = data binding.song = data
@ -73,7 +73,7 @@ class AlbumViewHolder private constructor(
private val binding: ItemAlbumBinding, private val binding: ItemAlbumBinding,
doOnClick: (data: Album) -> Unit, doOnClick: (data: Album) -> Unit,
doOnLongClick: (view: View, data: Album) -> Unit doOnLongClick: (view: View, data: Album) -> Unit
) : BaseHolder<Album>(binding, doOnClick, doOnLongClick) { ) : BaseViewHolder<Album>(binding, doOnClick, doOnLongClick) {
override fun onBind(data: Album) { override fun onBind(data: Album) {
binding.album = data binding.album = data
@ -106,7 +106,7 @@ class ArtistViewHolder private constructor(
private val binding: ItemArtistBinding, private val binding: ItemArtistBinding,
doOnClick: (Artist) -> Unit, doOnClick: (Artist) -> Unit,
doOnLongClick: (view: View, data: Artist) -> Unit doOnLongClick: (view: View, data: Artist) -> Unit
) : BaseHolder<Artist>(binding, doOnClick, doOnLongClick) { ) : BaseViewHolder<Artist>(binding, doOnClick, doOnLongClick) {
override fun onBind(data: Artist) { override fun onBind(data: Artist) {
binding.artist = data binding.artist = data
@ -139,7 +139,7 @@ class GenreViewHolder private constructor(
private val binding: ItemGenreBinding, private val binding: ItemGenreBinding,
doOnClick: (Genre) -> Unit, doOnClick: (Genre) -> Unit,
doOnLongClick: (view: View, data: Genre) -> Unit doOnLongClick: (view: View, data: Genre) -> Unit
) : BaseHolder<Genre>(binding, doOnClick, doOnLongClick) { ) : BaseViewHolder<Genre>(binding, doOnClick, doOnLongClick) {
override fun onBind(data: Genre) { override fun onBind(data: Genre) {
binding.genre = data binding.genre = data
@ -168,7 +168,7 @@ class GenreViewHolder private constructor(
/** /**
* The Shared ViewHolder for a [Header]. Instantiation should be done with [from] * The Shared ViewHolder for a [Header]. Instantiation should be done with [from]
*/ */
class HeaderViewHolder(private val binding: ItemHeaderBinding) : BaseHolder<Header>(binding) { class HeaderViewHolder(private val binding: ItemHeaderBinding) : BaseViewHolder<Header>(binding) {
override fun onBind(data: Header) { override fun onBind(data: Header) {
binding.header = data binding.header = data

View file

@ -1,18 +1,23 @@
package org.oxycblt.auxio.ui package org.oxycblt.auxio.ui
import android.animation.LayoutTransition
import android.content.Context import android.content.Context
import android.graphics.Canvas import android.graphics.Canvas
import android.util.AttributeSet import android.util.AttributeSet
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.LinearLayout import android.widget.LinearLayout
import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import org.oxycblt.auxio.logD import org.oxycblt.auxio.logD
import org.oxycblt.auxio.logE import org.oxycblt.auxio.logE
import java.lang.reflect.Field import java.lang.reflect.Field
/** /**
* Hack layout that fixes an issue where disappearing views would draw over non-disappearing * Hack layout that fixes an issue where disappearing views would draw over non-disappearing
* views when animated with a stock LayoutTransition. Adapted from this StackOverflow answer: * views when animated with a stock LayoutTransition. If something breaks on the playback controls
* or nav bar, this is probably the culprit.
*
* Adapted from this StackOverflow answer:
* https://stackoverflow.com/a/35087229 * https://stackoverflow.com/a/35087229
*/ */
class SlideLinearLayout @JvmOverloads constructor( class SlideLinearLayout @JvmOverloads constructor(
@ -35,8 +40,14 @@ class SlideLinearLayout @JvmOverloads constructor(
private var doDrawingTrick: Boolean = false private var doDrawingTrick: Boolean = false
init { init {
// Apply custom interpolation for the slide animations
layoutTransition.apply {
setInterpolator(LayoutTransition.APPEARING, FastOutSlowInInterpolator())
setInterpolator(LayoutTransition.DISAPPEARING, FastOutSlowInInterpolator())
}
if (disappearingChildrenField != null) { if (disappearingChildrenField != null) {
// Create a junk view and add it, which makes all the magic happen [I think??]. // Create a junk view and add it, which makes all the magic happen [I think].
dumpView = View(context) dumpView = View(context)
addView(dumpView, 0, 0) addView(dumpView, 0, 0)
} }
@ -54,15 +65,14 @@ class SlideLinearLayout @JvmOverloads constructor(
override fun drawChild(canvas: Canvas?, child: View?, drawingTime: Long): Boolean { override fun drawChild(canvas: Canvas?, child: View?, drawingTime: Long): Boolean {
val children = getDisappearingChildren() val children = getDisappearingChildren()
// I have no idea what this code does.
if (doDrawingTrick && children != null) { if (doDrawingTrick && children != null) {
if (child == dumpView) { if (child == dumpView) { // Use the dump view as a marker for when to do the trick
var more = false var more = false
children.forEach { children.forEach {
more = more or super.drawChild(canvas, it, drawingTime) more = more or super.drawChild(canvas, it, drawingTime) // What????
} }
return more return more
} else if (children.contains(child)) { } else if (children.contains(child)) { // Ignore the disappearing children
return false return false
} }
} }
@ -73,7 +83,9 @@ class SlideLinearLayout @JvmOverloads constructor(
private fun beforeDispatchDraw(): Boolean { private fun beforeDispatchDraw(): Boolean {
val children = getDisappearingChildren() val children = getDisappearingChildren()
if (children == null || children.isEmpty() || childCount <= 1) { // Junk view included // Dont do trick if there are no disappearing children or if there arent any children other
// than the dump view.
if (children == null || children.isEmpty() || childCount <= 1) {
return false return false
} }
@ -86,10 +98,9 @@ class SlideLinearLayout @JvmOverloads constructor(
return disappearingChildren return disappearingChildren
} }
// If there is no list of disappearing children yet, attempt to get it.
try { try {
disappearingChildren = disappearingChildrenField.get(this) as List<View>? disappearingChildren = disappearingChildrenField.get(this) as List<View>?
} catch (e: IllegalAccessException) { } catch (e: Exception) {
logD("Could not get list of disappearing children.") logD("Could not get list of disappearing children.")
} }

View file

@ -26,21 +26,21 @@
android:id="@+id/controls_container" android:id="@+id/controls_container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" android:animateLayoutChanges="true"
android:background="?android:attr/windowBackground" android:background="?android:attr/windowBackground"
android:baselineAligned="false" android:baselineAligned="false"
android:animateLayoutChanges="true"
android:elevation="@dimen/elevation_normal" android:elevation="@dimen/elevation_normal"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"> app:layout_constraintBottom_toBottomOf="parent">
<com.google.android.material.bottomnavigation.BottomNavigationView <com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/nav_bar" android:id="@+id/nav_bar"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1.5"
android:background="@color/background" android:background="@color/background"
android:elevation="0dp" android:elevation="0dp"
app:elevation="0dp" app:elevation="0dp"
android:layout_weight="1.5"
app:menu="@menu/menu_nav" /> app:menu="@menu/menu_nav" />
<androidx.fragment.app.FragmentContainerView <androidx.fragment.app.FragmentContainerView

View file

@ -210,11 +210,11 @@
<ImageButton <ImageButton
android:id="@+id/playback_shuffle" android:id="@+id/playback_shuffle"
style="@style/Widget.Button.Unbounded" style="@style/Widget.Button.Unbounded"
android:layout_marginEnd="@dimen/margin_mid_small"
android:background="@drawable/ui_unbounded_ripple" android:background="@drawable/ui_unbounded_ripple"
android:contentDescription="@{playbackModel.isShuffling() ? @string/description_shuffle_off : @string/description_shuffle_on" android:contentDescription="@{playbackModel.isShuffling() ? @string/description_shuffle_off : @string/description_shuffle_on"
android:onClick="@{() -> playbackModel.invertShuffleStatus()}" android:onClick="@{() -> playbackModel.invertShuffleStatus()}"
android:src="@drawable/ic_shuffle" android:src="@drawable/ic_shuffle"
android:layout_marginEnd="@dimen/margin_mid_small"
app:layout_constraintBottom_toBottomOf="@+id/playback_skip_next" app:layout_constraintBottom_toBottomOf="@+id/playback_skip_next"
app:layout_constraintEnd_toEndOf="@+id/playback_song_duration" app:layout_constraintEnd_toEndOf="@+id/playback_song_duration"
app:layout_constraintTop_toTopOf="@+id/playback_skip_next" /> app:layout_constraintTop_toTopOf="@+id/playback_skip_next" />

View file

@ -26,10 +26,10 @@
android:id="@+id/controls_container" android:id="@+id/controls_container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"
android:background="?android:attr/windowBackground"
android:animateLayoutChanges="true" android:animateLayoutChanges="true"
android:background="?android:attr/windowBackground"
android:elevation="@dimen/elevation_normal" android:elevation="@dimen/elevation_normal"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"> app:layout_constraintBottom_toBottomOf="parent">
<androidx.fragment.app.FragmentContainerView <androidx.fragment.app.FragmentContainerView

View file

@ -13,9 +13,7 @@
android:title="@string/label_sort" android:title="@string/label_sort"
app:showAsAction="always"> app:showAsAction="always">
<menu> <menu>
<group <group android:checkableBehavior="single">
android:id="@+id/group_sorting"
android:checkableBehavior="single">
<item <item
android:id="@+id/option_sort_none" android:id="@+id/option_sort_none"
android:contentDescription="@string/description_sort_none" android:contentDescription="@string/description_sort_none"

View file

@ -7,9 +7,7 @@
android:title="@string/label_filter" android:title="@string/label_filter"
app:showAsAction="ifRoom"> app:showAsAction="ifRoom">
<menu> <menu>
<group <group android:checkableBehavior="single">
android:id="@+id/group_filtering"
android:checkableBehavior="single">
<item <item
android:id="@+id/option_filter_all" android:id="@+id/option_filter_all"
android:title="@string/label_filter_all" android:title="@string/label_filter_all"

View file

@ -0,0 +1,88 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Label Namespace | Static Labels -->
<string name="label_retry">재시도</string>
<string name="label_grant">허가</string>
<string name="label_library">보관함</string>
<string name="label_genres">장르</string>
<string name="label_artists">아티스트</string>
<string name="label_albums">앨범</string>
<string name="label_songs">노래</string>
<string name="label_all_songs">노래</string>
<string name="label_search">검색</string>
<string name="label_filter">필터</string>
<string name="label_filter_all">전부</string>
<string name="label_sort">분류</string>
<string name="label_sort_none">기본</string>
<string name="label_sort_alpha_down">А-Z</string>
<string name="label_sort_alpha_up">Z-A</string>
<string name="label_play">재생</string>
<string name="label_shuffle">모든 곡 랜덤 재생</string>
<string name="label_playback">지금 재생 중</string>
<string name="label_queue">대기열</string>
<string name="label_queue_add">대기열에 추가</string>
<string name="label_queue_added">가 대기열에 추가되었습니다</string>
<string name="label_next_user_queue">다음 곡</string>
<string name="label_go_artist">아티스트로 가기</string>
<string name="label_go_album">앨범으로 가기</string>
<string name="label_about">정보</string>
<string name="label_version">버전</string>
<string name="label_code">GitHub에서 보기</string>
<string name="label_faq">FAQ</string>
<string name="label_licenses">라이선스</string>
<!-- Settings namespace | Settings-related labels -->
<string name="setting_title">설정</string>
<string name="setting_ui">스타일</string>
<string name="setting_theme">테마</string>
<string name="setting_theme_auto">자동</string>
<string name="setting_theme_day">밝은 테마</string>
<string name="setting_theme_night">어두운 테마</string>
<string name="setting_accent">강조</string>
<string name="setting_color_notif">색상화된 알림</string>
<string name="setting_quality_covers">미디어 스토어 앨범 커버 무시</string>
<string name="setting_audio">오디오</string>
<string name="setting_audio_focus">오디오 포커스</string>
<string name="setting_audio_plug_mgt">헤드셋 연결</string>
<string name="setting_behavior">동작</string>
<string name="setting_behavior_end_loop">계속</string>
<string name="setting_behavior_end_stop">중단</string>
<!-- Error Namespace | Error Labels -->
<string name="error_no_music">노래를 찾을 수 없습니다</string>
<!-- Description Namespace | Accessibility Strings -->
<string name="description_track_number">트랙 %d</string>
<string name="description_play_pause">재생/일시 정지</string>
<string name="description_clear_user_queue">재생 대기열 비우기</string>
<string name="description_error">오류</string>
<!-- Hint Namespace | EditText Hints -->
<string name="hint_search_library">저장소 검색…</string>
<!-- Format Namespace | Value formatting/plurals -->
<string name="format_songs_loaded">찾은 노래 수: %d</string>
<plurals name="format_song_count">
<item quantity="other">노래</item>
</plurals>
<plurals name="format_album_count">
<item quantity="other">앨범</item>
</plurals>
</resources>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<!-- Label Namespace | Static Labels --> <!-- Label Namespace | Static Labels -->
<string name="label_retry">Reîncearcă</string> <string name="label_retry">Reîncearcă</string>
<string name="label_grant">Permiteți</string> <string name="label_grant">Permiteți</string>

View file

@ -52,6 +52,5 @@
<!-- Misc --> <!-- Misc -->
<dimen name="elevation_normal">4dp</dimen> <dimen name="elevation_normal">4dp</dimen>
<dimen name="elevation_high">8dp</dimen>
<dimen name="offset_thumb">4dp</dimen> <dimen name="offset_thumb">4dp</dimen>
</resources> </resources>