Add ko [Korean] translations
Add partial translations for korean.
This commit is contained in:
parent
62572e7e52
commit
b6ac897314
17 changed files with 141 additions and 56 deletions
|
@ -1,6 +1,5 @@
|
|||
package org.oxycblt.auxio
|
||||
|
||||
import android.animation.LayoutTransition
|
||||
import android.content.res.ColorStateList
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
|
@ -10,7 +9,6 @@ import android.view.ViewGroup
|
|||
import androidx.core.graphics.ColorUtils
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.interpolator.view.animation.FastOutSlowInInterpolator
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.NavOptions
|
||||
import androidx.navigation.fragment.NavHostFragment
|
||||
|
@ -71,13 +69,6 @@ class MainFragment : Fragment() {
|
|||
|
||||
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 {
|
||||
itemIconTintList = navTints
|
||||
itemTextColor = navTints
|
||||
|
|
|
@ -13,7 +13,7 @@ import org.oxycblt.auxio.music.BaseModel
|
|||
import org.oxycblt.auxio.music.Song
|
||||
import org.oxycblt.auxio.playback.PlaybackViewModel
|
||||
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.ui.Accent
|
||||
import org.oxycblt.auxio.ui.applyAccents
|
||||
|
@ -107,7 +107,7 @@ class AlbumDetailAdapter(
|
|||
|
||||
inner class AlbumHeaderViewHolder(
|
||||
private val binding: ItemAlbumHeaderBinding
|
||||
) : BaseHolder<Album>(binding) {
|
||||
) : BaseViewHolder<Album>(binding) {
|
||||
|
||||
override fun onBind(data: Album) {
|
||||
binding.album = data
|
||||
|
@ -126,7 +126,7 @@ class AlbumDetailAdapter(
|
|||
|
||||
inner class AlbumSongViewHolder(
|
||||
private val binding: ItemAlbumSongBinding,
|
||||
) : BaseHolder<Song>(binding, doOnClick, doOnLongClick), Highlightable {
|
||||
) : BaseViewHolder<Song>(binding, doOnClick, doOnLongClick), Highlightable {
|
||||
private val normalTextColor = binding.songName.currentTextColor
|
||||
private val inactiveTextColor = binding.songTrack.currentTextColor
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ import org.oxycblt.auxio.music.Artist
|
|||
import org.oxycblt.auxio.music.BaseModel
|
||||
import org.oxycblt.auxio.playback.PlaybackViewModel
|
||||
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.ui.Accent
|
||||
import org.oxycblt.auxio.ui.applyAccents
|
||||
|
@ -106,7 +106,7 @@ class ArtistDetailAdapter(
|
|||
|
||||
inner class ArtistHeaderViewHolder(
|
||||
private val binding: ItemArtistHeaderBinding
|
||||
) : BaseHolder<Artist>(binding) {
|
||||
) : BaseViewHolder<Artist>(binding) {
|
||||
|
||||
override fun onBind(data: Artist) {
|
||||
binding.artist = data
|
||||
|
@ -126,7 +126,7 @@ class ArtistDetailAdapter(
|
|||
// Generic ViewHolder for a detail album
|
||||
inner class ArtistAlbumViewHolder(
|
||||
private val binding: ItemArtistAlbumBinding,
|
||||
) : BaseHolder<Album>(binding, doOnClick, doOnLongClick), Highlightable {
|
||||
) : BaseViewHolder<Album>(binding, doOnClick, doOnLongClick), Highlightable {
|
||||
private val normalTextColor = binding.albumName.currentTextColor
|
||||
|
||||
override fun onBind(data: Album) {
|
||||
|
|
|
@ -13,7 +13,7 @@ import org.oxycblt.auxio.music.Genre
|
|||
import org.oxycblt.auxio.music.Song
|
||||
import org.oxycblt.auxio.playback.PlaybackViewModel
|
||||
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.ui.Accent
|
||||
import org.oxycblt.auxio.ui.applyAccents
|
||||
|
@ -108,7 +108,7 @@ class GenreDetailAdapter(
|
|||
|
||||
inner class GenreHeaderViewHolder(
|
||||
private val binding: ItemGenreHeaderBinding
|
||||
) : BaseHolder<Genre>(binding) {
|
||||
) : BaseViewHolder<Genre>(binding) {
|
||||
override fun onBind(data: Genre) {
|
||||
binding.genre = data
|
||||
binding.detailModel = detailModel
|
||||
|
@ -126,7 +126,7 @@ class GenreDetailAdapter(
|
|||
|
||||
inner class GenreSongViewHolder(
|
||||
private val binding: ItemGenreSongBinding,
|
||||
) : BaseHolder<Song>(binding, doOnClick, doOnLongClick), Highlightable {
|
||||
) : BaseViewHolder<Song>(binding, doOnClick, doOnLongClick), Highlightable {
|
||||
private val normalTextColor = binding.songName.currentTextColor
|
||||
|
||||
override fun onBind(data: Song) {
|
||||
|
|
|
@ -16,8 +16,6 @@ import android.support.v4.media.MediaMetadataCompat
|
|||
import android.support.v4.media.session.MediaSessionCompat
|
||||
import android.view.KeyEvent
|
||||
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.ExoPlaybackException
|
||||
import com.google.android.exoplayer2.MediaItem
|
||||
|
|
|
@ -3,6 +3,7 @@ package org.oxycblt.auxio.playback.queue
|
|||
import android.annotation.SuppressLint
|
||||
import android.view.MotionEvent
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.widget.TooltipCompat
|
||||
import androidx.recyclerview.widget.AsyncListDiffer
|
||||
import androidx.recyclerview.widget.ItemTouchHelper
|
||||
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.playback.PlaybackViewModel
|
||||
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.ui.inflater
|
||||
|
||||
|
@ -132,7 +133,7 @@ class QueueAdapter(
|
|||
*/
|
||||
inner class QueueSongViewHolder(
|
||||
private val binding: ItemQueueSongBinding,
|
||||
) : BaseHolder<Song>(binding) {
|
||||
) : BaseViewHolder<Song>(binding) {
|
||||
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
override fun onBind(data: Song) {
|
||||
|
@ -159,12 +160,13 @@ class QueueAdapter(
|
|||
*/
|
||||
inner class UserQueueHeaderViewHolder(
|
||||
private val binding: ItemActionHeaderBinding
|
||||
) : BaseHolder<Header>(binding) {
|
||||
) : BaseViewHolder<Header>(binding) {
|
||||
|
||||
init {
|
||||
binding.headerButton.contentDescription = binding.headerButton.context.getString(
|
||||
R.string.description_clear_user_queue
|
||||
)
|
||||
binding.headerButton.apply {
|
||||
contentDescription = context.getString(R.string.description_clear_user_queue)
|
||||
TooltipCompat.setTooltipText(this, contentDescription)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onBind(data: Header) {
|
||||
|
|
|
@ -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.
|
||||
* @author OxygenCobalt
|
||||
*/
|
||||
abstract class BaseHolder<T : BaseModel>(
|
||||
abstract class BaseViewHolder<T : BaseModel>(
|
||||
private val binding: ViewDataBinding,
|
||||
private val doOnClick: ((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.
|
||||
* 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)
|
||||
}
|
|
@ -38,7 +38,7 @@ class SongViewHolder private constructor(
|
|||
private val binding: ItemSongBinding,
|
||||
doOnClick: (data: Song) -> Unit,
|
||||
doOnLongClick: (view: View, data: Song) -> Unit
|
||||
) : BaseHolder<Song>(binding, doOnClick, doOnLongClick) {
|
||||
) : BaseViewHolder<Song>(binding, doOnClick, doOnLongClick) {
|
||||
|
||||
override fun onBind(data: Song) {
|
||||
binding.song = data
|
||||
|
@ -73,7 +73,7 @@ class AlbumViewHolder private constructor(
|
|||
private val binding: ItemAlbumBinding,
|
||||
doOnClick: (data: Album) -> Unit,
|
||||
doOnLongClick: (view: View, data: Album) -> Unit
|
||||
) : BaseHolder<Album>(binding, doOnClick, doOnLongClick) {
|
||||
) : BaseViewHolder<Album>(binding, doOnClick, doOnLongClick) {
|
||||
|
||||
override fun onBind(data: Album) {
|
||||
binding.album = data
|
||||
|
@ -106,7 +106,7 @@ class ArtistViewHolder private constructor(
|
|||
private val binding: ItemArtistBinding,
|
||||
doOnClick: (Artist) -> Unit,
|
||||
doOnLongClick: (view: View, data: Artist) -> Unit
|
||||
) : BaseHolder<Artist>(binding, doOnClick, doOnLongClick) {
|
||||
) : BaseViewHolder<Artist>(binding, doOnClick, doOnLongClick) {
|
||||
|
||||
override fun onBind(data: Artist) {
|
||||
binding.artist = data
|
||||
|
@ -139,7 +139,7 @@ class GenreViewHolder private constructor(
|
|||
private val binding: ItemGenreBinding,
|
||||
doOnClick: (Genre) -> Unit,
|
||||
doOnLongClick: (view: View, data: Genre) -> Unit
|
||||
) : BaseHolder<Genre>(binding, doOnClick, doOnLongClick) {
|
||||
) : BaseViewHolder<Genre>(binding, doOnClick, doOnLongClick) {
|
||||
|
||||
override fun onBind(data: Genre) {
|
||||
binding.genre = data
|
||||
|
@ -168,7 +168,7 @@ class GenreViewHolder private constructor(
|
|||
/**
|
||||
* 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) {
|
||||
binding.header = data
|
||||
|
|
|
@ -1,18 +1,23 @@
|
|||
package org.oxycblt.auxio.ui
|
||||
|
||||
import android.animation.LayoutTransition
|
||||
import android.content.Context
|
||||
import android.graphics.Canvas
|
||||
import android.util.AttributeSet
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.LinearLayout
|
||||
import androidx.interpolator.view.animation.FastOutSlowInInterpolator
|
||||
import org.oxycblt.auxio.logD
|
||||
import org.oxycblt.auxio.logE
|
||||
import java.lang.reflect.Field
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
class SlideLinearLayout @JvmOverloads constructor(
|
||||
|
@ -35,8 +40,14 @@ class SlideLinearLayout @JvmOverloads constructor(
|
|||
private var doDrawingTrick: Boolean = false
|
||||
|
||||
init {
|
||||
// Apply custom interpolation for the slide animations
|
||||
layoutTransition.apply {
|
||||
setInterpolator(LayoutTransition.APPEARING, FastOutSlowInInterpolator())
|
||||
setInterpolator(LayoutTransition.DISAPPEARING, FastOutSlowInInterpolator())
|
||||
}
|
||||
|
||||
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)
|
||||
addView(dumpView, 0, 0)
|
||||
}
|
||||
|
@ -54,15 +65,14 @@ class SlideLinearLayout @JvmOverloads constructor(
|
|||
override fun drawChild(canvas: Canvas?, child: View?, drawingTime: Long): Boolean {
|
||||
val children = getDisappearingChildren()
|
||||
|
||||
// I have no idea what this code does.
|
||||
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
|
||||
children.forEach {
|
||||
more = more or super.drawChild(canvas, it, drawingTime)
|
||||
more = more or super.drawChild(canvas, it, drawingTime) // What????
|
||||
}
|
||||
return more
|
||||
} else if (children.contains(child)) {
|
||||
} else if (children.contains(child)) { // Ignore the disappearing children
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
@ -73,7 +83,9 @@ class SlideLinearLayout @JvmOverloads constructor(
|
|||
private fun beforeDispatchDraw(): Boolean {
|
||||
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
|
||||
}
|
||||
|
||||
|
@ -86,10 +98,9 @@ class SlideLinearLayout @JvmOverloads constructor(
|
|||
return disappearingChildren
|
||||
}
|
||||
|
||||
// If there is no list of disappearing children yet, attempt to get it.
|
||||
try {
|
||||
disappearingChildren = disappearingChildrenField.get(this) as List<View>?
|
||||
} catch (e: IllegalAccessException) {
|
||||
} catch (e: Exception) {
|
||||
logD("Could not get list of disappearing children.")
|
||||
}
|
||||
|
||||
|
|
|
@ -26,21 +26,21 @@
|
|||
android:id="@+id/controls_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:animateLayoutChanges="true"
|
||||
android:background="?android:attr/windowBackground"
|
||||
android:baselineAligned="false"
|
||||
android:animateLayoutChanges="true"
|
||||
android:elevation="@dimen/elevation_normal"
|
||||
android:orientation="horizontal"
|
||||
app:layout_constraintBottom_toBottomOf="parent">
|
||||
|
||||
<com.google.android.material.bottomnavigation.BottomNavigationView
|
||||
android:id="@+id/nav_bar"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1.5"
|
||||
android:background="@color/background"
|
||||
android:elevation="0dp"
|
||||
app:elevation="0dp"
|
||||
android:layout_weight="1.5"
|
||||
app:menu="@menu/menu_nav" />
|
||||
|
||||
<androidx.fragment.app.FragmentContainerView
|
||||
|
|
|
@ -210,11 +210,11 @@
|
|||
<ImageButton
|
||||
android:id="@+id/playback_shuffle"
|
||||
style="@style/Widget.Button.Unbounded"
|
||||
android:layout_marginEnd="@dimen/margin_mid_small"
|
||||
android:background="@drawable/ui_unbounded_ripple"
|
||||
android:contentDescription="@{playbackModel.isShuffling() ? @string/description_shuffle_off : @string/description_shuffle_on"
|
||||
android:onClick="@{() -> playbackModel.invertShuffleStatus()}"
|
||||
android:src="@drawable/ic_shuffle"
|
||||
android:layout_marginEnd="@dimen/margin_mid_small"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/playback_skip_next"
|
||||
app:layout_constraintEnd_toEndOf="@+id/playback_song_duration"
|
||||
app:layout_constraintTop_toTopOf="@+id/playback_skip_next" />
|
||||
|
|
|
@ -26,10 +26,10 @@
|
|||
android:id="@+id/controls_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:background="?android:attr/windowBackground"
|
||||
android:animateLayoutChanges="true"
|
||||
android:background="?android:attr/windowBackground"
|
||||
android:elevation="@dimen/elevation_normal"
|
||||
android:orientation="vertical"
|
||||
app:layout_constraintBottom_toBottomOf="parent">
|
||||
|
||||
<androidx.fragment.app.FragmentContainerView
|
||||
|
|
|
@ -13,9 +13,7 @@
|
|||
android:title="@string/label_sort"
|
||||
app:showAsAction="always">
|
||||
<menu>
|
||||
<group
|
||||
android:id="@+id/group_sorting"
|
||||
android:checkableBehavior="single">
|
||||
<group android:checkableBehavior="single">
|
||||
<item
|
||||
android:id="@+id/option_sort_none"
|
||||
android:contentDescription="@string/description_sort_none"
|
||||
|
|
|
@ -7,9 +7,7 @@
|
|||
android:title="@string/label_filter"
|
||||
app:showAsAction="ifRoom">
|
||||
<menu>
|
||||
<group
|
||||
android:id="@+id/group_filtering"
|
||||
android:checkableBehavior="single">
|
||||
<group android:checkableBehavior="single">
|
||||
<item
|
||||
android:id="@+id/option_filter_all"
|
||||
android:title="@string/label_filter_all"
|
||||
|
|
88
app/src/main/res/values-ko/strings.xml
Normal file
88
app/src/main/res/values-ko/strings.xml
Normal 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>
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Label Namespace | Static Labels -->
|
||||
<!-- Label Namespace | Static Labels -->
|
||||
<string name="label_retry">Reîncearcă</string>
|
||||
<string name="label_grant">Permiteți</string>
|
||||
|
||||
|
|
|
@ -52,6 +52,5 @@
|
|||
|
||||
<!-- Misc -->
|
||||
<dimen name="elevation_normal">4dp</dimen>
|
||||
<dimen name="elevation_high">8dp</dimen>
|
||||
<dimen name="offset_thumb">4dp</dimen>
|
||||
</resources>
|
Loading…
Reference in a new issue