[Tex/LaTex] Problems with “retrieved from” in bibliography produced by BibLaTeX (APA style)

apa-styleapa6biblatex

I am using biblatex with apa style. More or less everything works fine. However, LaTeX produces the following warnings

Package biblatex Warning: Bibliography string 'retrieved' undefined
(biblatex) at entry 'eraut2012' on input line 90.

Package biblatex Warning: Bibliography string 'from' undefined
(biblatex) at entry 'eraut2012' on input line 90.

Moreover, BibLaTeX prints the "retrieved from" string in small letters and bold type face:

enter image description here

My question therefore is:

How do I fix this problem? Instead of "retrieved from" I need "Retrieved from" to occur in the bibliography.

I already found those discussions: [1] and [2]. However, they did not help.

Ps.: Using \DeclareLanguageMapping{american}{american-apa} produced the same problem. The \DefineBibliographyExtras{english}{... is necessary because otherwise I do not get a publication year in brackets after the author in the bibliography.

PPs.: I know that this reference would not need a URL in an APA-style bibliography. However, it was the first in my list that had one…

MWE:

\documentclass[a4paper]{scrbook}
\usepackage[utf8]{inputenc} 
\usepackage[english]{babel} 
\usepackage{csquotes} 

\usepackage[style=apa, sortcites=true, backend=biber]{biblatex}

\DeclareLanguageMapping{british}{british-apa}

\AtEveryBibitem{%
  \clearfield{day}%
  \clearfield{month}%
  \clearfield{endday}%
  \clearfield{endmonth}%
}

\DefineBibliographyExtras{english}{%
  \protected\def\mkbibdateapalong#1#2#3{%
    \iffieldundef{#1}%
      {}%
      {\thefield{#1}}%
    \iffieldundef{#2}%
      {}%
      {\iffieldundef{#1}%
        {}%
        {\addcomma\addspace}%
       \mkbibmonth{\thefield{#2}}}%
    \iffieldundef{#3}%
      {}%
      {\ifthenelse{\iffieldundef{#2}\OR\iffieldundef{#1}}%
        {}%
        {\addspace}%
       \stripzeros{\thefield{#3}}}}%
  \protected\def\mkbibdateapalongextra#1#2#3{%
    \iffieldundef{#1}%
      {}%
      {\thefield{#1}\printfield{extrayear}}%
    \iffieldundef{#2}%
      {}%
      {\iffieldundef{#1}%
        {}%
        {\addcomma\addspace}%
       \mkbibmonth{\thefield{#2}}}%
    \iffieldundef{#3}%
      {}%
      {\ifthenelse{\iffieldundef{#2}\OR\iffieldundef{#1}}%
        {}%
        {\addspace}%
       \stripzeros{\thefield{#3}}}}%
  \protected\def\mkbibdateapalongdmy#1#2#3{%
    \iffieldundef{#3}%
      {}%
      {\stripzeros{\thefield{#3}}}%
    \iffieldundef{#2}%
      {}%
      {\iffieldundef{#3}%
        {}%
        {\addspace}%
       \mkbibmonth{\thefield{#2}}}%
    \iffieldundef{#1}%
      {}%
      {\ifthenelse{\iffieldundef{#2}\OR\iffieldundef{#3}}%
        {}%
        {\addspace}%
       \thefield{#1}}}}

\begin{filecontents}{apa-test-bib.bib}

@incollection{eraut2012,
    location = {Dordrecht},
    title = {Developing a broader approach to professional learning},
    isbn = {978-94-007-1723-7 978-94-007-1724-4},
    url = {http://www.springerlink.com/index/10.1007/978-94-007-1724-4_2},
    pages = {21--45},
    booktitle = {Learning trajectories, innovation and identity for professional development},
    publisher = {Springer Netherlands},
    author = {Eraut, Michael},
    editor = {Mc Kee, Anne and Eraut, Michael},
    date = {2012},
    langid = {english}
}

\end{filecontents}

\addbibresource{apa-test-bib.bib}

\begin{document}

This is some text. \cite{eraut2012}
\printbibliography

\end{document}

Best Answer

Update: With biblatex-apa version 7.5 or above and biblatex version 3.8 or above (released in November 2017) and explicit \DeclareLanguageMapping should not be needed for biblatex-apa any more. The mapping will be automatically executed for all supported languages. This means that this answer has essentially become obsolete. Update your TeX system if possible.

Note that at the time of writing this note (July 2019) Overleaf is still running an outdated system, where \DeclareLanguageMapping is still needed for biblatex-apa.

The rest of the answer is kept below for historical interest and people stuck with older systems.

The languages you request for babel and the language mappings need to match.

Either use

\usepackage[british]{babel} 
...
\DeclareLanguageMapping{british}{british-apa}

for British English, or use

\usepackage[english]{babel} 
...
\DeclareLanguageMapping{english}{english-apa}

for American English (without US punctuation).

In your MWE your document is in english, and you told biblatex to request british-apa instead of british, effectively changing nothing for you since you didn't request british in the first place.

Another symptom of this was that you needed the \DefineBibliographyExtras{english} block for the dates. With matching languages that is no longer necessary.

Related Question