Android Lint가 번역되지 않은 문자열에 대해 불평하지 않도록 방지


119

value-* 디렉토리 내의 파일에있는 문자열 이 의도적으로 다른 언어로 번역되지 않도록 지정할 수 있습니까? 모든 언어에 공통적이고 번역이 필요하지 않은 문자열이 많이 있으므로 디렉토리 unlocalized-strings.xml내에 파일을 생성했습니다 values. 문제를 확인하기 위해 Android Lint를 실행하면 일부 번역이 누락되었다는 메시지가 계속 표시됩니다 .. 원하지 않습니다. 전체 프로젝트에서이 검사를 비활성화하려면 일부 XML 파일에서만 비활성화하고 싶습니다. 가능합니까?

"title_widget_updater_service" is not translated in de, en, en-rUS, it

Issue: Checks for incomplete translations where not all strings are translated
Id: MissingTranslation

If an application has more than one locale, then all the strings declared in one language     
should also be translated in all other languages.

By default this detector allows regions of a language to just provide a subset of the 
strings and fall back to the standard language strings. You can require all regions to 
provide a full translation by setting the environment variable 
ANDROID_LINT_COMPLETE_REGIONS.

지역화되지 않은 문자열 영역 을 어떻게 정의 할 수 있습니까?


답변:


159

모든 파일을 무시하는 방법을 모르겠지만 다음을 사용하여 문자열별로 수행 할 수 있습니다.

<string name="hello" translatable="false">hello</string>

1
이렇게하면 '번역 할 수없는 리소스는 기본 값 / 폴더에만 정의되어야합니다.
anon58192932 2013 년

2
그리고 그것은 맞습니다. 문자열을 번역하지 않으려면 "기본 값 / 폴더"에서만 정의해야합니다. 즉, 번역 된 값 / 폴더에 문자열을 입력하지 마십시오.
Luis

1
@CyrilLeroux 답변은 더 포괄적이며 번역 불가능한 모든 문자열을 하나의 파일에 넣는 옵션을 보여주기 때문에 올바른 답변으로 표시해야합니다.
Yoel Gluschnaider

이것은 작동하지만 오류 메시지를 억제하기 위해 실제로 번역 가능한 문자열을 "번역 할 수 없음"으로 표시하여 문제를 해결하는 가장 좋은 방법이라고 생각하지 않습니다. 우리는 당분간 일부 문자열을 번역하지 않기로 선택했습니다. 그러나 그것이 번역 할 수 없다는 것을 의미하지는 않습니다.
Zili FENG

하나의 언어로만 문자열을 넣고 싶습니다. 그것은 독일어 (de) 언어 (기본 영어가 아님)입니다. 나는 그것을 거기에 놓고 빌드를 릴리스하려고 할 때 오류가 발생했습니다. 이 경우 어떻게해야합니까?
Aanal Mehta

228

다음과 같이 문자열 파일 ignore에있는 tools네임 스페이스 의 속성입니다 .

<?xml version="1.0" encoding="utf-8"?>
<resources
  xmlns:tools="http://schemas.android.com/tools"
  tools:ignore="MissingTranslation" >

  <!-- your strings here; no need now for the translatable attribute -->

</resources>

<resources tools : ignore = "MissingTranslation">에서 XML 구문 분석 오류 : 언 바운드 접두사
anon58192932

5
이것은 잘 작동하지만 Project->Clean오류를 확실히 제거 하기 위해 가야했습니다 .
xonya 2013

적어도 eclipse는 ids.xml 및 analytics.xml과 같은 이상한 문자열 폴더를 포함하여 모든 것을 번역하도록 강요하지 않았습니다.
Androidcoder

2
이것은 단 2 줄의 코드로 모든 문제를 해결하기위한 대답으로 받아 들여 져야합니다.
nhoxbypass

153

추가 build.gradle:

android {
     lintOptions {
        disable 'MissingTranslation'
    }
}

7
자동 생성 된 문자열 리소스를 처리 할 수있는 유일한 솔루션입니다.
SqueezyMo 2015

6
더는 질문을 기반으로, 안 : "나는 전체 프로젝트에이 체크 해제하고 싶지 않아"
요엘 Gluschnaider

@Giraffe Lion 당신은 이것을 다른 질문으로 게시하고 스스로 대답해야합니다. 해결책에 감사드립니다. 이전에 수동으로 비활성화해야했습니다.
Diljeet 2017 년

1
이것은 가능하면 피해야하는 전체 검사를 비활성화했습니다. 왜 이렇게 많은 표를 받았는지 이해할 수 없습니다.
tasomaniac

23

내가 아는 세 가지 방법이 있습니다.

값으로 수정 값을 적용하려면 다음 translatable="false"과 같이 <string>정의에 속성 을 설정하십시오 .

<string name="account_setup_imap" translatable="false">IMAP</string>

번역하지 말아야 할 리소스가 많은 경우 이름이 지정된 파일에 배치 할 수 donottranslate.xml있으며 Lint는 번역 할 수없는 리소스를 모두 고려합니다.

Hackers Keyboard 프로젝트 소스 를 탐색하는 동안 발견 한 또 다른 방법 : 리소스 파일에
접두사 donottranslate-를 추가 할 수 있습니다 . 이전 예에서와 같이 Lint는 번역 할 수없는 리소스를 모두 고려합니다.
귀하의 경우에는, 당신은 대체 할 수 있습니다 unlocalized-strings.xmldonottranslate-strings.xml. 작동하는 것 같지만이 팁에 대한 문서를 찾지 못했습니다.

참조 : Android 도구 프로젝트 사이트 : 번역 할 수없는 문자열


파일에 문자열을 넣으면 더 이상 태그 donottranlate.xml를 추가 할 필요가 없다는 것이 사실 translatable="false"입니까?
Yuchen Zhong

네. 내 모든 프로젝트에서 donottranslate-strings.xml 파일을 사용합니다. 잘 작동합니다. 그것을 시도, 그것은 매우 유용합니다!
Cyril Leroux

12

이 치명적인 Lint 오류를 비활성화하는 Android Studio 솔루션은 다음과 같습니다.

여기에 이미지 설명 입력


2
성가신 오류 일 수 있지만 실수로 새 문자열을 앱 언어 중 하나로 번역하는 것을 잊었을 때 도움이 될 수 있습니다.
Elad 나바


2

파일 이름이 " donottranslate "(예 : donottranslate.xml , donottranslate_urls.xml 등)로 시작하는 리소스 파일을 생성하면 Lint는 누락 된 번역을 확인할 때 해당 문자열을 모두 무시합니다.


1

누락 된 번역에 대한 보푸라기 검사 기능을 해제하려면

"프로젝트 속성-> Android Lint 환경 설정-> MissingTranslation 선택-> Swtich To Ignore In Severity",

이것이 다른 사람들 이이 문제를 만났을 때 도움이되기를 바랍니다. :)


2
Android Studio에서 수행하는 방법이 있습니까? Lint 관련 설정을 찾을 수 없습니다
adrian_88

1

이를 수행하는 또 다른 방법은 resValue또는을 사용하여 gradle 파일에 문자열을 추가하는 것 buildConfigField입니다. 그런 것 :

buildTypes {
    debug {
        buildConfigField "string", "app_name1", "App Name"
        resValue "string", "app_name2", "App Name"
    }
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        buildConfigField "string", "app_name1", "App Name"
        resValue "string", "app_name2", "App Name"
    }
}

사용법 :

// buildConfigField
BuildConfig.APP_NAME1

// resValue
getString(R.string.app_name2)

0

Android Studio에서 경고를 피하려면 Preferences ==> Inspections를 열고 "불완전한 번역"을 선택 취소하십시오. 그러나 Gradle 빌드에는 영향을 미치지 않습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.